远程嵌入式设备上带有核心文件的GDB - 如何获取有关回溯的更多信息?

时间:2018-03-07 23:37:40

标签: c++ c linux debugging gdb

我有一个来自嵌入式imx6板(yocto linux)上运行的C ++应用程序的核心转储。我可以将gdb放在盒子上并在终端中运行它来检查核心文件,就好了:

gdb myApplication core.udpsrc256:src.1520419431.5526

我的信息非常有限,而且真的需要了解更多关于导致核心转储的原因。我所拥有的只是来自应用程序的打印输出:

(myApplication:5526): GLib-ERROR **: ../../glib-2.46.2/glib/gmem.c:100: failed to allocate 65611 bytes
./run-app.sh: line 8:  5526 Trace/breakpoint trap   (core dumped) XDG_RUNTIME_DIR=/run/user/root ./myApplication

核心转储回溯也提供了一些无用的东西。我需要了解导致此框架的堆栈中的更多内容:

#0  0x75ff1910 in raise () from /lib/libc.so.6
[Current thread is 1 (LWP 5533)]
(gdb) 
(gdb) 
(gdb) bt
#0  0x75ff1910 in raise () from /lib/libc.so.6
#1  0x6b169558 in g_logv () from /usr/lib/libglib-2.0.so.0
#2  0x6b169610 in g_log () from /usr/lib/libglib-2.0.so.0
#3  0x6b1681c4 in g_malloc () from /usr/lib/libglib-2.0.so.0
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

旁注 - 启动gdb时会出现一些警告:

GNU gdb (GDB) 7.10.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "arm-poky-linux-gnueabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from qt5qmlvideo...done.

warning: exec file is newer than core file.
[New LWP 5533]
[New LWP 5526]
[New LWP 5531]
[New LWP 5528]
[New LWP 5534]
[New LWP 21064]
[New LWP 5536]
[New LWP 21065]
[New LWP 5532]
[New LWP 5527]
[New LWP 5530]
[New LWP 5537]

warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?

warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.

warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.
Core was generated by `./qt5qmlvideo -platform wayland'.
Program terminated with signal SIGTRAP, Trace/breakpoint trap.
#0  0x75ff1910 in raise () from /lib/libc.so.6
[Current thread is 1 (LWP 5533)]
(gdb) 

有人可以帮忙吗?我是否需要gdb警告的一些内容...或者我可以在其他一些可以提供更多输出的配置中重建我的应用程序及其依赖项吗?谢谢!

可能重要的一些注释 -

这是一个运行gstreamer管道的多线程应用程序。许多gstreamer插件生成自己的线程,其中一个在此管道中是“udpsrc”。我想知道它是否因为这些故障发生在其中一个线程中是我无法获得详细信息的原因,但我想知道如何在可能的情况下让它显示详细信息!

2 个答案:

答案 0 :(得分:0)

(1) 在

  

您需要“set solib-search-path”还是“set sysroot”?

是个问题。检查linux-vdso.so.1所在的路径(在您的设备上),并将其包含在solib-search-path中。对于程序使用的其他共享对象库也是如此。例如。如果某些共享对象库在/ lib中,有些在/ usr / adowdy / lib中,有些在/ usr / adowdy / arm / lib中,您可以说:

  

(gdb)set solib-search-path / lib:/ usr / adowdy / lib:/ usr / adowdy / arm / lib

(2)

  

警告:找不到匹配劣质线程的libthread_db   库,线程调试将无法使用。

也是一个问题。请参阅this question

的答案

(3)

  

无法分配65611个字节

是一个线索。你有没有尝试分配负数字节(可能是65536 - 65611 = -75字节)?

答案 1 :(得分:0)

  

核心转储回溯也会产生一些无用的东西。

它并非完全没用。堆栈跟踪和来自应用程序的消息说同样的事情:您的应用程序内存不足(malloc无法分配65611字节)。

虽然更完整的堆栈会告诉您哪个g_malloc的特定呼叫失败,但实际上它很可能无关紧要 - 如果g_malloc没有失败,下一个会失败。

您可能有内存泄漏,或者只是为系统允许的内容分配太多内存。

您应该研究为解决这个问题而构建的许多调试工具。