我有一个用 C++ 编写的套接字应用程序,它在 Linux 上运行。今天早上它崩溃了,当我检查 /var/log/messages 时,我在崩溃时看到了以下行:
kernel: traps: LogProcessor[9364] general protection ip:4f2555 sp:7fbd529b1670 error:0 in MyPrg[400000+21a000]
Run Code Online (Sandbox Code Playgroud)
我想深入研究代码并找到原因,但我不知道如何解释错误行中的值。
这是否意味着错误是由 LogProcessor 引起的?“ip”、“sp”、“error:0”、MyPrg[400000+21a000] 的值是什么?
最有意义的信息是指令指针(IP)。您可以使用 GNU 工具检查您的二进制文件并检查发生了什么。例如使用 addr2line
addr2line -e <your binary> 0x4f2555
Run Code Online (Sandbox Code Playgroud)
如果您的应用程序是使用调试符号 (-g) 构建的,并且代码(而不是库)中发生了错误,则输出应该向您显示问题。
SP是崩溃时的堆栈指针。MyPrg[400000+21a000] 告诉您二进制的虚拟地址。
error:0 表示除以零(如果您的应用程序在 x86 架构上运行): https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/include /asm/traps.h#n148