【发布时间】:2013-05-29 19:59:04
【问题描述】:
我正在 Linux 上调试静态多线程 x86-64 C++ 应用程序。
我可以在函数上设置断点并停止它们,我可以一步一步地遍历函数体。但是当我尝试进入另一个函数时,gdb 并没有在它的开始处停止,它似乎只是继续执行。当我中断程序执行时,gdb 进入损坏状态并变得无法使用:
(gdb) bt
Target is executing.
(gdb) c
Continuing.
Cannot execute this command while the selected thread is running.
(gdb)
作为一种解决方法,我可以多次使用stepi 而不是step,stepi 按预期工作。
这种行为的原因可能是什么?除了使用stepi,还有什么变通方法吗?
我正在使用 gdb 7.6 和 gcc 4.7.1。
【问题讨论】:
-
您是否使用
-ggdb和-O0编译了目标?您是否尝试过观察 step (s) 和 next (n) 之间的区别? -
@Reinderien,我的目标是用
-g和-O0编译的。如何观察s和n之间的区别? -
尝试将其从
-g更改为-ggdb。要查看差异,请逐步在 gdb 中键入s(实际上是“进入”)与n(实际上是“跳过”)。 -
@Reinderien,
n按预期工作,我写道“我可以一步一步地走过函数体”,但s(“step into”) 不行,这就是区别如果这就是你的意思。 -
您需要发布您的代码。有线程调用吗?
标签: c++ linux gdb static-linking