编译时,使用-g 参数把调试信息(函数名、变量名)加到可执行文件中。
gdb启用
- gdb <program>
调试<program> - gdb <program> <core>
调试<program生成的core>文件 - gdb <program> <PID>
调试运行时的<program> - gdb –pid <PID>
调试运行时的<PID>对应的进程
gdb常用命令
-
print [/<fmt>] <expr> (简写p) 显示指定表达式的内容
<expr> 显示的表达式。可以为全局变量、局部变量、数组名等。
<fmt> 显示的格式。x 为十六进制格式,c 为字符格式等。 -
examine [/<len>/<fmt>/<step>] <addr> (简写x) 显示指定地址内容 <addr> 显示的内存地址的起始地址
<len> 显示内存的长度
<fmt> 显示格式。s 为字符串,u 为十六进制。(缺省为十六进制)
<step> 表示一次显示的字节数。b为单字,h为双字,w为四字。(缺省为四字) -
thread <id> 切换到指定线程
<id> 线程编号 -
frame <id> 切换到线程中的指定层次的函数
<id> 函数层次 -
backtrace [full] 显示当前线程整个栈回溯信息
-
thread apply all backtrace [full] 显示所有线程的栈回溯信息
-
info reg 查看当前寄存器信息
-
info symbol <addr> 显示函数地址对应的函数名
<addr> 为函数指针地址 -
call [function] 调用可执行函数
-
next (简写n) 不进入函数的单步执行
-
step (简写s) 进入函数的单步执行
-
continue (简写c) 从断点继续运行
-
set $var=1 定义临时变量