使用 gdb 运行带有分段错误的程序效果很好

问题描述 投票:0回答:3

我实现了使用

mmap()
系统调用的程序,但是在进程运行时出现了SegmentationFault

所以,我用 gdb 运行了这个程序,但是当我这样做时,它运行良好,没有段错误。

我想知道使用 gdb 运行是否可能会影响段错误。 你能告诉我一下吗?

debugging segmentation-fault gdb
3个回答
0
投票

如果使用gdb运行可能会影响段错误。

一种可能性:GDB 禁用地址随机化(以便更容易重现错误)。您可以通过以下方式重新启用它:

(gdb) set disable-randomization off

GDB也可能影响线程的计时,但你没有提到线程,所以这种可能性较小。


0
投票

您可能在代码中的某处调用了违反 C 或 C++ 规则的未定义行为。尝试在 Valgrind 下运行该程序。如果是这种情况,它应该为您提供更多信息。


0
投票

我最近遇到了这样的问题。我假设 gdb 正在做一些“额外”的事情来使程序正常工作,所以我选择的方法如下:

  • 我先隔离运行程序
  • 然后我使用
    gdb progname pid
  • 将 gdb 附加到正在运行的进程
  • 在gdb内部,我做了
    c
    以继续,并让段错误触发
  • 然后我就能够研究导致段错误的回溯(通过
    back
    up
    down

就我而言,c 程序在调用 realloc() 时卡住了。我还没有弄清楚原因,但很高兴至少我能够查明导致它的位置,并且现在可以研究代码的这个区域。

© www.soinside.com 2019 - 2024. All rights reserved.