十年来我一直在使用 gdb,但从未见过这个特殊问题。我升级到 gdb 7.4,问题仍然存在。
我正在 RHEL5 上调试 Cilk 多线程 C++ 应用程序。执行在段错误处停止。当我要求 gdb 打印某些变量的值(它们是 boost::intrusive_ptr 对模板化对象实例的引用)时,gdb 将打印正确的值,但也会在很短的时间内恢复所有线程上的执行。我怀疑它会恢复执行,因为我的更多调试打印语句滚动到终端(它不仅仅是清除缓冲区——我可以继续打印它并且它会继续恢复执行)。这种持续执行的短暂突增导致我正在跟踪的变量的值发生变化。至少可以说,这阻碍了调试。
我怀疑我有内存泄漏并且堆栈已损坏,但我已经在代码上运行了 valgrind(具有不同的初始条件)并且它显示我正在调试的主要子系统中没有内存泄漏,除了名义上的 Cilk - 内部泄漏。