在远程嵌入式设备上使用核心文件的 GDB - 如何获取有关回溯的更多信息?
GDB with corefile on remote embedded device - How to get more information about backtrace?
我有一个核心转储,来自在嵌入式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"。我想知道是否是因为在其中一个线程中发生的失败是我无法获取详细信息的原因,但我想知道如何让它在可能的情况下显示详细信息!
(1) 这
你需要"设置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下级线程 库,线程调试将不可用。
也是一个问题。查看此问题的答案
(3)
无法分配 65611 字节
是一个线索。您是否试图分配负数字节(也许是 65536 - 65611 = -75 字节)?
此外,核心转储回溯提供了一些无用的东西。
它并非完全没用。堆栈跟踪和来自应用程序的消息说的是同一件事:您的应用程序内存不足(malloc
无法分配 65611 字节)。
虽然更完整的堆栈会告诉你哪个特定的调用失败g_malloc
,但在实践中很可能无关紧要 - 如果这个g_malloc
没有失败,下一个就会失败。
您可能有内存泄漏,或者只是为系统允许的内存分配了太多内存。
您应该研究为解决此确切问题而构建的许多调试工具。
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 具有默认值的引用获取函数
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 读取、读取、获取和获取行之间有什么区别?