【发布时间】:2015-05-01 09:24:23
【问题描述】:
我正在远程机器上运行一个程序,我只能使用标准输出与之交互。我在程序的某个地方有一个段错误,我试图找出在哪里。是否可以为 sigsegv 编写一个信号处理程序,给我行号和它发生的文件?
【问题讨论】:
-
为什么不能在远程机器上使用 gdb 来回溯段错误?
-
我没有对该系统的完全访问权限。我只能在那里提交我的 C 文件,它会执行二进制文件并给我输出。
-
这将为您提供故障的地址。如果他们正在编译您的代码以包含调试信息,那么您将不得不做很多 的工作来解析 DWARF 数据以确定实际的行号。在本地构建并使用传统方法(即 gdb)进行调试会容易得多。
-
你可以在一个简单的程序中尝试
system("addr2line --help");来检查它是否在这个系统上可用,如果是,然后编写一个信号处理程序,它为信号发生的指令指针调用它。跨度>
标签: c