|
|
1
71
我不知道gcc选项,但您应该能够使用gdb运行应用程序,然后当它崩溃时,键入
另一个选择是使用
|
|
|
2
25
$ 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... 快乐黑客:-) |
|
|
3
10
当程序获得SEGV信号时,可以让gcc打印stacktrace,这与Java和其他更友好的语言处理空指针异常的方式类似。有关更多详细信息,请参见我的回答:
如果使用-g编译并按照那里的说明进行操作,则可以使用命令行工具,如 addr2line 从输出中获取文件/行信息。 |
|
|
4
7
|
|
|
5
4
您还需要在-g上使用调试标志进行构建
|
|
|
6
4
如果前面所有关于使用调试(-g)编译并在调试器(gdb,run,bt)下运行的建议都不适用于您,那么:
|
|
|
7
1
GCC没有提供此信息的方法,您必须依赖GDB这样的外部程序。
|
|
|
8
1
作为记录,我遇到了这个问题,因为我忘记了代码中的返回,这使得我的程序以失败代码退出。 |
|
|
CH_YUR · 为什么这段代码有分段错误? 4 年前 |
|
|
Okonjo Mitchel · CS50凯撒:分段故障问题 4 年前 |
|
|
Drin Kurtishi · cs50在线课程中凯撒问题集的问题 4 年前 |
|
|
DynamicApproach · 提取exec函数的参数 4 年前 |
|
Horcrux7 · 如何使用jffi/jnr处理SIGSEGV? 4 年前 |
|
|
J.Doe · 向函数传递双指针以获取C中的字符串 8 年前 |