您的位置:首页 > 其它

GDB调试入门

2010-01-29 23:21 225 查看
调试符号-g 是在编译的时候产生,而非链接的时候产生;所以: 编译成.o文件时候,需要带这个选项.



与调试相关的几个知识点:

1. 执行命令: gdb [可执行文件]

如果不是-g选项编译出来的,会直接告诉你,不能调试



2. 通过list标出文件

多个源文件可以是: list a.cpp:10 表示列出源文件a.cpp的第十行(不指定行号,此命令将无效)



3. 通过break + 行号 打断点

break 10 在第十行打印结果

break 46 if testsize==100 有条件的 break



注意,不要将断点设置在无意义的字段,比如 int a; 程序将跑到下一个有效的语句上面。



next, continue, step区别:



next表示跳往当前代码栈中的下一条指令,如果下一条指令是函数调用,并且函数中存在断点,则直接跑到该断点中止。

continue 表示跳往下一个断点, next和continue的区别是: 在当前代码堆栈中,step和next都会一条条的执行,而continue直接跑到下一个断点去执行去了。 如果当前代码中调用的是函数栈,则next和continue没有任何区别【直接跑到断点处中止】。



step 和next 在当前代码栈中相似,都是一条条语句执行,不同的是在函数栈调用时,next进入的方式直接跑到断点处中止(所以叫做"下一个"),step是从函数栈的起始位置中止(所以叫做“单步”)。



4. 执行run指令,则遇到断点,就会停止,通过watch + 变量名 查看结果, next执行到下一个断点, continue下一个断点,kill结束





5. 为加快调试速度,以上命令都可以简写为第一个字母。在 gdb 提示符下按回车健将重复上一个命令。



转载一篇文章,非常详细



http://fanqiang.chinaunix.net/program/other/2006-07-14/4834.shtml



该文中列举的常用的断点管理命令:



1.所有断点信息 info break

2. 删除指定的某个断点:delete breakpoint 1 该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点

3.禁止使用某个断点 disable breakpoint 1 该命令将禁止断点 1,同时断点信息的 (Enb)域将变为 n



4.允许使用某个断点 enable breakpoint 1 该命令将允许断点 1,同时断点信息的 (Enb)域将变为 y


5.清除原文件中某一代码行上的所有断点:clean number



6. 函数调用 call function(arg1, arg2)







附注环境知识:



文本环境和GUI环境的切换[ubuntu下]



ctrl+alt+F1可以,但是只是切换到文本模式,图形界面还在运行; alt+ctrl+f7返回
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: