在gdb中打印某些变量会导致执行恢复

时间:2012-08-14 15:38:34

标签: gdb

我已经使用gdb十年了,从未见过这个特殊问题。我升级到gdb 7.4,问题仍然存在。

我正在RHEL5上调试Cilk多线程C ++应用程序。执行停止在seg故障。当我要求gdb打印某些变量的值(这是对模板化对象实例的boost :: intrusive_ptr引用)时,gdb将打印正确的值,但将在所有线程上恢复执行很短的时间。我怀疑它恢复执行,因为我的调试打印语句更多滚动到终端(它不仅仅是清除缓冲区---我可以继续打印它并继续执行)。这种持续执行的短暂突发导致我跟踪的变量的值发生变化。至少可以说这阻碍了调试。

我怀疑我有内存泄漏并且堆栈已损坏,但我在代码上运行valgrind(具有不同的初始条件)并且它在我正在调试的主要子系统中没有显示内存泄漏,除了名义上的Cilk内部泄漏。

1 个答案:

答案 0 :(得分:1)

  

当我要求gdb打印某些变量的值(对templated对象实例的boost :: intrusive_ptr引用)时,gdb将打印正确的值,但也会在很短的时间内在所有线程上恢复执行。

我知道这件事的唯一方法就是如果你有

  1. 类型为boost::intrusive_ptr)和
  2. 的python漂亮打印机
  3. 那个漂亮的打印机回调到劣质(正在调试)的过程。
  4. 您可以通过以下方式停用所有漂亮的打印机disable pretty-printer。如果这有帮助,您可能应该弄清楚哪个精确的漂亮打印机正在执行此操作,并与其作者联系。