- 编译程序时要确保开启调试信息,以便gdb能够正确地显示源代码和变量信息。这通常通过在编译命令中添加
-g
参数来实现。 - 启动gdb并加载可执行文件。假设你的可执行文件名为
my_program
,则可以在终端中输入gdb my_program
来启动gdb并加载该程序。 - 使用gdb的各种命令来观察程序的状态。例如:
run
: 运行程序bt
: 打印当前的函数调用栈thread apply all bt
: 打印所有线程的函数调用栈info threads
: 显示当前所有线程的信息thread <thread_id>
: 切换到指定线程watch <variable>
: 设置一个监视点,当指定变量的值发生变化时停下来info variables
: 显示当前作用域内的变量信息
- 当程序陷入死锁时,使用以上命令来观察每个线程的状态,查看各个线程的函数调用栈,以及他们正在等待的资源。
- 分析线程调用栈以找出导致死锁的原因。检查是否有互斥锁未被正确释放,或者是否存在循环依赖的资源请求。