Ben*_*ird 51 c debugging gdb segmentation-fault
我有一个多线程C程序,它在程序的特定点始终生成分段错误.当我用gdb运行它时,没有显示错误.你能想到只有在不使用调试器时才会出现故障的原因吗?不能用它来发现问题真烦人!
Meh*_*dad 78
经典的Heisenbug.来自维基百科:
时间也可能是heisenbugs的一个因素.与正常执行相比,在调试器的控制下执行程序可以改变程序的执行定时.当程序通过调试器中的单步源线减慢时,时间敏感的错误(如竞争条件)可能无法再现.当行为涉及与不在调试器控制下的实体交互时,例如在两台机器之间调试网络数据包处理且只有一台机器处于调试器控制之下时,尤其如此.
调试器可能正在改变定时,并隐藏竞争条件.
在Linux上,GDB还会禁用地址空间随机化,并且您的崩溃可能特定于地址空间布局.试试(gdb) set disable-randomization off
.
最后,ulimit -c unlimited
验尸调试(已经由Robie建议)可能有效.
通过调试它,您正在更改运行它的环境。这听起来像是您正在处理某种竞争条件,并且通过调试它,事情安排的时间略有不同,因此您不会遇到问题。那样的话,或者事物的存储方式略有不同,因此不会发生。您是否可以在代码中放入一些调试输出以帮助解决问题?这可能影响较小,并且使您可以查找问题。
归档时间: |
|
查看次数: |
24608 次 |
最近记录: |