在同一个工程构建出的Debug版和Release版可执行文件projectD和projectR,使用如下objcopy命令把Debug版中的符号表加到Release版中,实现对Release版的调试。
1、objcopy --only-keep-debug projectD projectsymbol.dbg #生成符号表;
2、gdb --symbol=projectsymbol.dbg -exec=projectR #运行调试;或者
gdb --symbol=projectsymbol.dbg projectR coredump_file #调试coredump
这样加载符号表到底有什么用呢? 目前还没有想法。
bt (backtrace):显示栈信息。
Release版显示的堆栈信息:
Debug版本显示的堆栈信息,比Release版多了文件名和行号:
使用Release版本即使是加载了符号表,也不会显示源文件名和行号。
set args 可指定运行时参数。(如:set args 10 20 30 40 50)
show args 命令可以查看设置好的运行参数。
break <function> 在进入指定函数时停住
可以通过info breakpoints [n]命令查看当前断点信息。此外,还有如下几个配套的常用命令:
-
delete 删除所有断点 -- 缩写 "d"
-
delete breakpoint [n] 删除某个断点 -- 缩写 "d [n]"
-
disable breakpoint [n] 禁用某个断点 -- 缩写"dis"
-
enable breakpoint [n] 使能某个断点
和调试步进相关的命令主要有如下几条:
-
continue 继续运行程序直到下一个断点(类似于VS里的F5)
-
next 逐过程步进,不会进入子函数(类似VS里的F10)
-
setp 逐语句步进,会进入子函数(类似VS里的F11)
-
until 运行至当前语句块结束
-
finish 运行至函数结束并跳出,并打印函数的返回值(类似VS的Shift+F11)
和源码查看有关的:
- directory:不带参数的directory将源码搜索目录恢复为默认值。
- set directories path-list:将源码目录设置为path-list,但是会补上默认目录。 (缩写 dir path-list)
- show directories:显示源码搜索目录列表。