Linux 如何翻译内核';s陷阱分割错误rsp:2b6d2ea40450到源位置?

Linux 如何翻译内核';s陷阱分割错误rsp:2b6d2ea40450到源位置?,linux,debugging,gdb,divide-by-zero,Linux,Debugging,Gdb,Divide By Zero,客户报告我们的一个程序因除法为零而出错。 我们只有这条VLM生产线: kernel: myprog[16122] trap divide error rip:79dd99 rsp:2b6d2ea40450 error:0 我不相信有这方面的核心文件 我在互联网上搜索了一下,想知道我是如何分辨导致这个除法为零的程序行的,但到目前为止,我还是失败了 我知道16122是程序的pid,所以这对我没有帮助 我怀疑rsp:2b6d2ea40450与导致错误的线路地址(0x2b6d2ea40450)有关,

客户报告我们的一个程序因除法为零而出错。 我们只有这条VLM生产线:

kernel: myprog[16122] trap divide error rip:79dd99 rsp:2b6d2ea40450 error:0 
我不相信有这方面的核心文件

我在互联网上搜索了一下,想知道我是如何分辨导致这个除法为零的程序行的,但到目前为止,我还是失败了

我知道16122是程序的pid,所以这对我没有帮助

我怀疑rsp:2b6d2ea40450与导致错误的线路地址(0x2b6d2ea40450)有关,但这是真的吗

如果是,那么假设我可以将myprog的调试版本加载到gdb中,然后请求显示此地址周围的上下文,我如何将其转换为源代码中的物理近似位置


任何,任何帮助都将不胜感激

rip是指令指针,rsp是堆栈指针。除非有核心映像或正在运行的进程,否则堆栈指针不会太有用

您可以使用
addr2line
gdb
中的
反汇编
命令,根据ip查看出错的行

$ cat divtest.c main() { int a, b; a = 1; b = a/0; } $ ./divtest Floating point exception (core dumped) $ dmesg|tail -1 [ 6827.463256] traps: divtest[3255] trap divide error ip:400504 sp:7fff54e81330 error:0 in divtest[400000+1000] $ addr2line -e divtest 400504 ./divtest.c:5 $ gdb divtest (gdb) disass /m 0x400504 Dump of assembler code for function main: 2 { 0x00000000004004f0 : push %rbp 0x00000000004004f1 : mov %rsp,%rbp 3 int a, b; 4 5 a = 1; b = a/0; 0x00000000004004f4 : movl $0x1,-0x4(%rbp) 0x00000000004004fb : mov -0x4(%rbp),%eax 0x00000000004004fe : mov $0x0,%ecx 0x0000000000400503 : cltd 0x0000000000400504 : idiv %ecx 0x0000000000400506 : mov %eax,-0x8(%rbp) 6 } 0x0000000000400509 : pop %rbp 0x000000000040050a : retq End of assembler dump. $cat divtest.c main() { INTA,b; a=1;b=a/0; } 美元/分测试 浮点异常(内核转储) $dmesg | tail-1 [6827.463256]陷阱:除法测试[3255]陷阱除法错误ip:400504sp:7fff54e81330 错误:divtest[400000+1000]中的0 $addr2line-e divtest 400504 c:5 $gdb divtest (gdb)disass/m 0x400504 主功能的汇编程序代码转储: 2 { 0x00000000004004f0:推送%rbp 0x0000000000404F1:mov%rsp,%rbp 3 int a,b; 4. 5A=1;b=a/0; 0x0000000000404F4:movl$0x1,-0x4(%rbp) 0x00000000004004fb:mov-0x4(%rbp),%eax 0x00000000004004fe:mov$0x0,%ecx 0x0000000000400503:cltd 0x0000000000400504:idiv%ecx 0x0000000000400506:mov%eax,-0x8(%rbp) 6 } 0x0000000000400509:弹出%rbp 0x000000000040050a:retq 汇编程序转储结束。
做记号非常感谢你!