C 总线错误在gdb中消失
我有一个C语言的大程序,它编译得很好,但是当我运行它(./a.out)时,我得到:总线错误10!C 总线错误在gdb中消失,c,gdb,C,Gdb,我有一个C语言的大程序,它编译得很好,但是当我运行它(./a.out)时,我得到:总线错误10! 我使用gdb调试器跟踪内存错误,但奇怪的是程序在gdb内正常完成。是否可以解释这种行为,以及我现在如何调试代码?在某些操作系统上,gdb将以不同的方式在gdb中加载程序。我知道在MacOS上,gdb将禁用一些地址空间布局随机化,这将改变共享库的重新定位方式。在某些操作系统上,gdb将加载比正常程序执行更多的节,或者加载具有更大权限的节(非可执行内存可能在gdb下可执行,或者只读将变为可写) 您最好的
我使用gdb调试器跟踪内存错误,但奇怪的是程序在gdb内正常完成。是否可以解释这种行为,以及我现在如何调试代码?在某些操作系统上,gdb将以不同的方式在gdb中加载程序。我知道在MacOS上,gdb将禁用一些地址空间布局随机化,这将改变共享库的重新定位方式。在某些操作系统上,gdb将加载比正常程序执行更多的节,或者加载具有更大权限的节(非可执行内存可能在gdb下可执行,或者只读将变为可写)
您最好的办法是捕获问题的核心转储,并从那里继续调试。Valgrind也擅长捕捉此类bug。尝试在Valgrind而不是gdb下运行它。问题实际上只出现在MacOS上。Valgrind在osx 10.8中不起作用,所以我可能会切换到linux平台以避免麻烦。