我实现了使用
mmap()
系统调用的程序,但是在进程运行时出现了SegmentationFault。
所以,我用 gdb 运行了这个程序,但是当我这样做时,它运行良好,没有段错误。
我想知道使用 gdb 运行是否可能会影响段错误。 你能告诉我一下吗?
如果使用gdb运行可能会影响段错误。
一种可能性:GDB 禁用地址随机化(以便更容易重现错误)。您可以通过以下方式重新启用它:
(gdb) set disable-randomization off
GDB也可能影响线程的计时,但你没有提到线程,所以这种可能性较小。
您可能在代码中的某处调用了违反 C 或 C++ 规则的未定义行为。尝试在 Valgrind 下运行该程序。如果是这种情况,它应该为您提供更多信息。
我最近遇到了这样的问题。我假设 gdb 正在做一些“额外”的事情来使程序正常工作,所以我选择的方法如下:
gdb progname pid
c
以继续,并让段错误触发back
、up
和 down
)就我而言,c 程序在调用 realloc() 时卡住了。我还没有弄清楚原因,但很高兴至少我能够查明导致它的位置,并且现在可以研究代码的这个区域。