我遇到以下情况:我的程序运行良好,我想要它做什么,测试通过,Valgrind说它没事。唯一的问题是如果我在某个时刻暂停执行并尝试在QtCreator的调试视图中检查某些对象的状态(使用GDB),一些变量变为<not-accessible>
,并且在恢复执行时它会到达分段故障。
更具体一点,该程序是单线程的,这是在遵循树结构中的指针时发生的。通过测试的结果,结构看起来很好。
有没有人知道可能的原因?也许我以一种幸运地不影响测试的方式弄乱了堆栈,或者它可能只是一个不应该关心的IDE或调试器问题?提前感谢您的任何答案。
答案 0 :(得分:0)
有没有人知道可能的原因?
你的程序中有多个线程吗?
当一个程序的行为不同取决于是否存在某些GDB断点时,在99.99%的情况下,程序有数据竞争,而仅仅在“不合时宜”的时间停止它就会暴露这一事实。
在Linux上,您可以使用Thread Sanitizer来检查数据竞争。