二进制启动后分段错误

时间:2013-07-05 07:36:02

标签: c linux debugging

如何调试在Linux上启动二进制文件导致的分段错误? 没有源代码可用于二进制文件。

如何知道导致seg故障的二进制文件的系统调用。是否有可能有帮助的调试工具?

2 个答案:

答案 0 :(得分:5)

strace your-program是否会帮助您,它会打印您的程序调用的所有系统调用的列表。

样本输出

% strace true

    2       2 [main] true (2064) **********************************************
   83      85 [main] true (2064) Program name: C:\cygwin\bin\true.exe (windows pid 2064)
   44     129 [main] true (2064) OS version:   Windows NT-6.1
   36     165 [main] true (2064) **********************************************
  145     310 [main] true (2064) sigprocmask: 0 = sigprocmask (0, 0x6123D468, 0x610FBA10)
  183     493 [main] true 2064 open_shared: name shared.5, n 5, shared 0x60FF0000 (wanted 0x60FF0000), h 0x70, *m 6
   27     520 [main] true 2064 heap_init: heap base 0x20000000, heap top 0x20000000, heap size 0x18000000 (402653184)
   30     550 [main] true 2064 open_shared: name foo, n 1, shared 0x60FE0000 (wanted 0x60FE0000), h 0x68, *m 6
   18     568 [main] true 2064 user_info::create: opening user shared for 'foo' at 0x60FE0000
   17     585 [main] true 2064 user_info::create: user shared version 6467403B
   36     621 [main] true 2064 fhandler_pipe::create: name \\.\dir\cygwin-c5e39b7a9d22bafb-2064-sigwait, size 164, mode PIPE_TYPE_MESSAGE
   51     672 [main] true 2064 fhandler_pipe::create: pipe read handle 0x84
   16     688 [main] true 2064 fhandler_pipe::create: CreateFile: name \\.\dir\cygwin-c5e39b7a9d22bafb-2064-sigwait
   35     723 [main] true 2064 fhandler_pipe::create: pipe write handle 0x88
   23     746 [main] true 2064 dll_crt0_0: finished dll_crt0_0 initialization


答案 1 :(得分:5)

除了建议之外,您还可以执行以下操作:

运行ulimit -c unlimited以启用核心转储,然后运行您的应用。

在segfaulting时,它应该进行核心转储。

然后您可以运行gdb your_app core并在gdb内运行backtrace。也许它已经使用调试符号进行编译,因此您实际上可以获得相当多的信息。