在QtCreator上使用GDB检查变量后的SEGFAULT

时间:2017-12-07 13:58:37

标签: c++ gdb qt-creator

我遇到以下情况:我的程序运行良好,我想要它做什么,测试通过,Valgrind说它没事。唯一的问题是如果我在某个时刻暂停执行并尝试在QtCreator的调试视图中检查某些对象的状态(使用GDB),一些变量变为<not-accessible>,并且在恢复执行时它会到达分段故障。

更具体一点,该程序是单线程的,这是在遵循树结构中的指针时发生的。通过测试的结果,结构看起来很好。

有没有人知道可能的原因?也许我以一种幸运地不影响测试的方式弄乱了堆栈,或者它可能只是一个不应该关心的IDE或调试器问题?提前感谢您的任何答案。

1 个答案:

答案 0 :(得分:0)

  

有没有人知道可能的原因?

你的程序中有多个线程吗?

当一个程序的行为不同取决于是否存在某些GDB断点时,在99.99%的情况下,程序有数据竞争,而仅仅在“不合时宜”的时间停止它就会暴露这一事实。

在Linux上,您可以使用Thread Sanitizer来检查数据竞争。