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返回
与调试相关的几个知识点:
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返回
相关文章推荐