C++ GDB 调试
查找和调试进程的步骤
使用 ps aux | grep vrs
查找目标进程的 PID。例如,找到 PID 为 7150 的进程。
通过 sudo gdb -p 7150
或 sudo gdb attach 7150
附加到目标进程。确保有足够的权限执行调试操作。
常用 GDB 指令
c
或 continue
让程序继续运行。
Ctrl + C
暂停程序运行。
bt
打印当前线程的简化调用栈(函数名、参数和地址)。
bt full
打印当前线程的完整调用栈(包括局部变量值)。
break 函数名
或 break 文件名:行号
设置断点。
step
单步进入函数调用。
next
单步跳过函数调用。
info locals
查看当前栈帧的局部变量。
info args
查看当前函数的参数。
调试崩溃问题
使用 gdb -p $pid
附加到目标进程。
输入 c
让程序运行直到崩溃。
崩溃发生后,输入 bt full
获取完整的调用栈和变量信息,分析崩溃原因。
调试死锁问题
使用 gdb -p $pid
附加到目标进程。
输入 bt full
获取当前线程的完整调用栈。
输入 c
让程序继续运行。
当程序再次进入死锁状态时,按下 Ctrl + C
暂停程序。
再次输入 bt full
获取当前调用栈。
对比两次 bt full
的输出,分析线程阻塞点和资源竞争情况。