C-如何在CentOS 6.5中使用SEG故障的核心文件GDB



我的程序是多线程。我有一个核心文件,当我尝试调试时,我得到了。

Program terminated with signal 11, Segmentation fault.
#0  memcpy () at ../sysdeps/x86_64/memcpy.S:91
91      movl    %ecx, (%rdi)
Missing separate debuginfos, use: debuginfo-install libssh2-1.8.0-2.0.cf.rhel6.x86_64
(gdb) bt
#0  memcpy () at ../sysdeps/x86_64/memcpy.S:91
#1  0x00007f981b342feb in ?? ()
#2  0x00000000025f1ef0 in ?? ()
#3  0x00000000025edef0 in ?? ()
#4  0x00007fff4b65a810 in ?? ()
#5  0x0000000000000001 in ?? ()
#6  0x00000000025cb800 in ?? ()
#7  0x00000000025ccea0 in ?? ()
#8  0x0000000000000000 in ?? ()

为什么BT Infos是" ???"我可以识别哪个线程和何处seg故障?

谢谢。

为了运行GDB并充分利用它,首先,您需要使用以下方式使用gcc-g or -ggdb3选项来编译源:

gcc -ggdb3 sample.c -o sample

之后,您将获得可以执行的可执行文件或二进制文件。执行后,该程序将生成一个segfault,并将创建一个核心。您可以使用gdb使用以下方式使用此核心文件来获得回溯:

gdb ./sample /path/to/core/file

您甚至可以使用GDB启动程序,而无需单独执行并明确生成核心文件。如果要执行此操作,请执行以下命令:

gdb ./sample

" ??"条目是符号翻译失败的地方。堆栈步行(产生堆栈痕迹)也可能会失败。在这种情况下,您可能会看到一个有效的框架,然后看到少量的虚假地址。如果符号或堆栈太糟糕了,无法理解堆栈跟踪,则通常有一些方法可以解决:安装调试信息包(给GDB更多符号,并让其进行基于矮的堆栈步行)或重新编译软件从带有框架指针和调试信息的源(-fno-omit-frame-pointer -g)。

最新更新