GDB调试简易教程.ppt

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
exec(“sh” “–c” “gdb child”);
子进程的main函数中使用sleep进行延时,睡眠期间attach之
断点
断点的作用是当你程序运行到断点时,无 论它在做什么都会被停止下来 可以在行上,函数上,甚至在确切的地址 上设置断点
不用退出GDB就可以执行一个shell命令
make [make-args] 使用[make-args]进行make 相当于`shell make make-args'
GDB命令
命令输入技巧:
可以把一个gdb命令缩写成开头几个字母,如果这没有二意性你可以直接回车来运行。 如果有不止一个选择的话,你还可以使用TAB键让gdb给你完成接下来的键入,或向你 显示可选择的命令
GDB下运行程序
调试子进程的技巧:
正常情况下,可以在子进程运行后attach即可 如果需要调试子进程在启动过程中的问题,可以采取以下方法: 父进程启动代码:
pid = fork(); if (0 == pid)
exec(“sh” “–c” “child”);
更改为 pid = fork(); if (0 == pid)
GDB下运行程序
Run命令:
用于启动你的程序,使用命令前必须先指定你程序的名字(用 gdb的命令行参数)或使用‘file’命令,来指定文件名
工作路径:
每次用‘run’命令来运行程序时,程序将继承gdb的当前工作目 录。而gdb的工作目录是从它的父进程继承而来的(一般是shell)。 但你可以自己使用‘cd’命令指定工作目录。 gdb的工作目录就是它去寻找某些文件或信息的途径。 `cd DIRECTORY' 把gdb的工作目录设为DIRECTORY
GDB命令(使用help)
help [COMMAND] 列出某个命令的使用方法
complete <ARGS > 列出所有以ARGS开头的命令
‘info’ (可以缩写为‘i’)用来显示你程序的状态。比如,你可以 使用info args 列出你程序所接受的命令行参数。使用info registers列出寄存器的状态。
使用help
help [class] 显示某一类命令的列表
$help status Status inquiries.
List of commands:
show -- Generic command for showing things set with "set"
info -- Generic command for printing status
-symbols <文件名>(-s <文件名>) 从<文件名>中读去符号
-x <文件名> 执行gdb命令,在<文件名>指定的文件中存放着一序列的gdb
命令,就象一个批处理
-directory(-d) <路径> 指定路径。把<路径>加入到搜索源文件的路径中
常用启动参数:
-quiet (-q) 安静模式,不输出介绍和版权信息
交叉调试环境: 目标板:gdbserver :port –attach <PROCESS-ID> 调试端:target remote ip:port
停止调试: detach
GDB下运行程序
调试一个多线程的程序:
GDB会自动提示新线程创建 thread <threadno> 各线程间进行切换 info threads 查看已经存在的线程
‘show’与‘info’相反,‘show’命令用来显示gdb自身的状态 例如show version显示版本号,show copying显示版权信息
GDB下运行程序
程序编译:
当你在gdb下运行程序时,你必须先为gdb准备好 带有调试信息的可执行文档。 为了高效的调试一个程序,你需要使用编译器来产 生附带调试信息的可执行代码这些调试信息存储在 目标文件中;描述了变量数据类型和函数声明,在 源文件代码行和执行代码之间建立联系。 为产生调试信息,当你使用编译器时指定'-g'选项, 就可以为你的程序产生带有调试信息的可执行代码
无论gdb何时中断了你的程序(因为一个断点或是 一个信号),它自动选择信号或断点发生的线程 为当前线程。gdb将用一个格式为'[Switching to SYSTAG]'的消息来向你报告。
GDB下运行程序
调试多进程:
GDB对调试使用'fork'系统调用产生新进 程的程序没有很多支持。当一个程序开始 一个新进程时,GDB将继续对父进程进行 调试,子进程将不受影响的运行。如果你 在子进程可能会执行到的地方设了断点, 那么子进程将收到'SIGTRAP'信号,如果 子进程没 有对这个信号进行处理的话那么 缺省的处理就是使子进程终止。
然后继续查找另一 个bug
启动:
最通常的命令就是使用一个参数: $(m68k-linux-)gdb <可执行文档名>
你还可以同时为你的执行文件指定一个core文件: $gdb <可执行文件名> core
你也可以为你要执行的文件指定一个进程号: $gdb <可执行文件名> <进程号>
常用启动参数:
-x <文件名> 执行gdb命令,在<文件名>指定的文件中存放着一序列的gdb
命令,就象一个批处理
-directory(-d) <路径> 指定路径。把<路径>加入到搜索源文件的路径中
结束:
quit 直接退出gdb
detach 放弃连接
Shell命令:
shell <commandΒιβλιοθήκη Baidustring> 启动一个shell执行<command string>,
GDB调试方法与技巧
刘鹏昊
GDB简介:
调试器(例如GDB)能让你观察一个程序在执行时的内 部活动,或者程序出错时发生了什么
GDB主要能为你做四件事情:
运行你的程序,设置所有的能影响程序运行的东西 保证你的程序在指定的条件下停止 当你程序停止时,让你检查发生了什么 改变你的程序。那样你可以试着修正某个bug引起的问题,
`pwd' 打印输出当前目录
GDB下运行程序
调试一个已经运行的程序:
attach <PROCESS-ID> 这个命令把一个已经运行的进程(在gdb外启动)连接入gdb, 以便调试。PROCESS-ID是进程号。当然要使用 ‘attach’命令的话,你的操作系统环境必须支持进程。另 外你还要有向此进程发信号的权力。
相关文档
最新文档