Skip to content

Latest commit

 

History

History
12 lines (12 loc) · 1.08 KB

如何使用gdb来定位C++程序中的死锁?.md

File metadata and controls

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