我有一个程序,它在测试用例中产生致命错误,我可以通过读取致命错误的日志和堆栈跟踪来定位问题。原来是对空指针进行了读操作。
但是当我尝试将 GDB 附加到它并在可疑代码周围设置断点时,无法观察到空指针!程序运行顺利,没有任何错误。
这是一个单进程、单线程的程序,我以前没有经历过这种事情。为什么?
附加:我还尝试在致命触发代码之前调用pause()系统调用,并期望使程序在致命点之前休眠,然后动态附加GDB,遗憾的是,没有发生致命错误。
这只是不看代码的猜测,但调试器有时会这样做:
我没有关于 GDB 的报价,但我有关于 valgrind 的报价(假设这两个确实wildly不同的东西..)
我的程序正常崩溃,但在 Valgrind 下不会崩溃,反之亦然。发生了什么? http://valgrind.org/docs/manual/faq.html#faq.crashes
当程序在 Valgrind 下运行时,
它的环境略有不同
到它本地运行时。例如,
内存布局不同,并且
线程的调度方式是
不同的。
GDB 也是如此。
大多数时候这不会产生任何影响
差异,但它可以,特别是
如果你的程序有问题。
所以真正的问题可能出在你的程序中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)