Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 核心转储分析gdb:打印返回地址和参数_C_Linux_Gdb_Kernel_Coredump - Fatal编程技术网

C 核心转储分析gdb:打印返回地址和参数

C 核心转储分析gdb:打印返回地址和参数,c,linux,gdb,kernel,coredump,C,Linux,Gdb,Kernel,Coredump,我正在尝试使用gdb调试核心转储,如下所示 $ sudo gdb /usr/sbin/ietd /tmp/ietcore/CoreDump This GDB was configured as "x86_64-linux-gnu". Reading symbols from /usr/sbin/ietd...(no debugging symbols found)...done. [New LWP 5978] Core was generated by `/usr/sbin/ietd'. Pro

我正在尝试使用gdb调试核心转储,如下所示

$ sudo gdb /usr/sbin/ietd /tmp/ietcore/CoreDump
This GDB was configured as "x86_64-linux-gnu".
Reading symbols from /usr/sbin/ietd...(no debugging symbols found)...done.
[New LWP 5978]
Core was generated by `/usr/sbin/ietd'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007fdb77c0da03 in _IO_vfprintf_internal (s=<optimized out>, format=<optimized out>, ap=ap@entry=0x7fffd3515fc8)
    at vfprintf.c:1661
1661    vfprintf.c: No such file or directory.
(gdb) info frame
Stack level 0, frame at 0x7fffd3515fc0:
 rip = 0x7fdb77c0da03 in _IO_vfprintf_internal (vfprintf.c:1661); saved rip = 0x7fdb77ccb388
 called by frame at 0x7fffd35160b0
 source language c.
 Arglist at 0x7fffd3515fb0, args: s=<optimized out>, format=<optimized out>, ap=ap@entry=0x7fffd3515fc8
 Locals at 0x7fffd3515fb0, Previous frame's sp is 0x7fffd3515fc0
 Saved registers:
  rbx at 0x7fffd3515f88, rbp at 0x7fffd3515fb0, r12 at 0x7fffd3515f90, r13 at 0x7fffd3515f98, r14 at 0x7fffd3515fa0,
  r15 at 0x7fffd3515fa8, rip at 0x7fffd3515fb8
(gdb) 
(gdb) bt
#0  0x00007fdb77c0da03 in _IO_vfprintf_internal (s=<optimized out>, format=<optimized out>, ap=ap@entry=0x7fffd3515fc8)
    at vfprintf.c:1661
#1  0x00007fdb77ccb388 in ___printf_chk (flag=1, format=<optimized out>) at printf_chk.c:35
#2  0x0000000000402a77 in event_loop ()
#3  0x00000000004022e8 in main ()
(gdb) 
如何打印回信地址和参数

更新: 已安装调试符号,但仍未收到符号匹配错误

Reading symbols from /usr/sbin/ietd...Reading symbols from /usr/lib/debug//usr/sbin/ietd...done.
done.
英国电信线路号

(gdb) bt
#0  0x00007fdb77c0da03 in _IO_vfprintf_internal (s=<optimized out>, format=<optimized out>, ap=ap@entry=0x7fffd3515fc8)
    at vfprintf.c:1661
#1  0x00007fdb77ccb388 in ___printf_chk (flag=1, format=<optimized out>) at printf_chk.c:35
#2  0x0000000000402a77 in event_loop (timeout=-1) at ietd.c:237
#3  0x00000000004022e8 in main (argc=<optimized out>, argv=<optimized out>) at ietd.c:565
(gdb) 
(gdb)bt
#0 0x00007fdb77c0da03在内部(s=,格式=,ap=ap@entry=0x7fffd3515fc8)
在vfprintf.c:1661
#1 0x00007fdb77ccb388在printf\u chk处的printf\u chk中(标志=1,格式=)c:35
#ietd上事件_循环(超时=-1)中的2 0x0000000000402a77。c:237
#ietd:565中的3 0x00000000004022e8主(argc=,argv=)
(gdb)
仍然没有接收到符号匹配错误

Reading symbols from /usr/sbin/ietd...Reading symbols from /usr/lib/debug//usr/sbin/ietd...done.
done.
这是因为您要查找的地址:
0x00007fdb
与任何符号都不对应

正如EOF所说,x86_64优化代码不使用帧指针,因此查看
%rbp
周围的内存内容通常没有用处


对于您的一般问题:了解
\u IO\u vfprintf\u internal
内部的崩溃,通常最容易找到printf的调用者(在您的例子中是第2帧),并查看那里的格式说明符和参数。

使用
%rbp
调试优化的二进制文件可能会失败。它通常用作另一个被调用方保存的寄存器,而不是帧指针。另外,下载调试符号。我已经安装了调试信息包。那个么为什么它说并没有符号OK现在我已经安装了特定于软件包的符号,但我仍然并没有得到任何符号匹配似乎在以前的bt跟踪中并没有行号。但在新的跟踪中,有文件的行号和参数。不知道它是怎么来的。尝试使用这些行号调试符号,我可以使用
info-symbol
找到这些符号。再次不确定这是否有用您使用了
frame 2
info args
info locals
etc命令它是
printf
我放在我的代码中,类型说明符不正确,例如
%s
而不是
%d
。但仍然希望使用
info-symbol
达到这一点。我在
bt