GDB
- GDB 显示的是将要执行的代码行。
- GDB 的工作针对的是机器指令,而不是源代码行,一行代码可能对应与数行及其语言;GDB 之所以可以使用源代码行,是因为可执行文件包含了额外的信息。
- 暂停机制
- 断点(b):通知GDB在程序中的特定位置暂停执行。
- 监视点(watch) :通知GDB当特定内存位置(或者涉及一个或多个位置的表达式)的值发生变化时暂停执行。
- 捕获点 (catch):通知GDB当特定事件发生时暂停执行。
-
首先使用 n 指令,当程序不如期运行时,再使用 s 指令进入函数调试。
-
使用 b f u n c t i o n N a m e b \ function Name b functionName 可以再修改代码后,保留断点。
-
在不退出GDB的情况下,修改代码,重新编译;可以保留调试的断点信息。
-
watch foo stop when foo is modified watch -l foo watch location rwatch foo stop when foo is read watch foo thread 3 stop when thead 3 modifies foo watch foo if stop when foo is > 10
-
快捷键
ctrl-x-a : toggle to/form TUI mode ctrl-l : refresh the screen ctrl-p/ctrl-n : prev,next,commands ctrl-x-2 : second window;cycle through
pt:查看变量的真实类型,不受typedef的影响
up/down:在函数调用栈里面上下移动
fin:直接运到函数结束
wh:启动:可视化调试,ctrl+X+A 退出可视化调试
info signals:A signal is an asynchronous event that can happen in a program.
多进程
调试父进程
set follow-fork-mode parent #默认
调试子进程
set follow-fork-mode child
设置调试模式
set detach-on-fork [on|off] #默认是on
on:调试当前进程,其他进程继续运行。
off:调试当前进程,其他进程被 GDB 挂起。
查看调试的进程
info inferiors
切换当前调试的进程
inferior <PID>
GCC
g++ -m32 #编译生成32位机器程序