我已经使用gdb十年了,从未见过这个特殊问题。我升级到gdb 7.4,问题仍然存在。
我正在RHEL5上调试Cilk多线程C ++应用程序。执行停止在seg故障。当我要求gdb打印某些变量的值(这是对模板化对象实例的boost :: intrusive_ptr引用)时,gdb将打印正确的值,但将在所有线程上恢复执行很短的时间。我怀疑它恢复执行,因为我的调试打印语句更多滚动到终端(它不仅仅是清除缓冲区---我可以继续打印它并继续执行)。这种持续执行的短暂突发导致我跟踪的变量的值发生变化。至少可以说这阻碍了调试。
我怀疑我有内存泄漏并且堆栈已损坏,但我在代码上运行valgrind(具有不同的初始条件)并且它在我正在调试的主要子系统中没有显示内存泄漏,除了名义上的Cilk内部泄漏。
答案 0 :(得分:1)
当我要求gdb打印某些变量的值(对templated对象实例的boost :: intrusive_ptr引用)时,gdb将打印正确的值,但也会在很短的时间内在所有线程上恢复执行。
我知道这件事的唯一方法就是如果你有
boost::intrusive_ptr
)和您可以通过以下方式停用所有漂亮的打印机disable pretty-printer
。如果这有帮助,您可能应该弄清楚哪个精确的漂亮打印机正在执行此操作,并与其作者联系。