分段故障的行号

有没有我可以设置的gcc选项,这会给我分段错误的行号?

我知道我可以:

  • 逐行调试
  • 将printfs放在代码中以缩小范围。
  • 编辑:

  • bt / where上GDB给没有堆栈。
  • 有用的建议

  • 我不知道gcc选项,但是你应该可以使用gdb运行应用程序,然后当它崩溃时,键入where退出时查看堆栈的位置,这应该让你关闭。

    $ gdb blah
    (gdb) run
    (gdb) where
    

    编辑完整性:

    您还应该确保使用-g gcc选项在可执行文件中包含行号时使用调试标志构建应用程序。

    另一种选择是使用bt (backtrace)命令。


    这是一个完整的shell / gdb会话

    $ gcc -ggdb myproj.c
    $ gdb a.out
    gdb> run --some-option=foo --other-option=bar
    (gdb will say your program hit a segfault)
    gdb> bt
    (gdb prints a stack trace)
    gdb> q
    [are you sure, your program is still running]? y
    $ emacs myproj.c # heh, I know what the error is now...
    

    快乐黑客:-)


    当程序获取SEGV信号时,您可以让gcc打印堆栈跟踪,类似于Java和其他友好语言处理空指针异常的方式。 有关更多详细信息,请参阅我的答案

  • 如何在我的C ++应用程序崩溃时生成堆栈(使用gcc编译器)
  • 关于这一点的好处是你可以把它留在你的代码中; 你不需要通过gdb来运行一些东西来获得很好的调试输出。

    如果使用-g进行编译并按照其中的说明进行编译,则可以使用命令行工具(如addr2line)从输出中获取文件/行信息。

    链接地址: http://www.djcxy.com/p/86045.html

    上一篇: Line number of segmentation fault

    下一篇: How do I find where an exception was thrown in C++?