分析分段错误核心转储 (gdb)
Posted
技术标签:
【中文标题】分析分段错误核心转储 (gdb)【英文标题】:Analyzing Segmentation fault Core Dump (gdb) 【发布时间】:2018-06-06 04:30:57 【问题描述】:在 imax6q 定制硬件设计上运行基于 Linux 的应用程序时,我遇到了以下分段错误。我使用 Linux GDB 回溯了核心转储,然后您可以看到这些核心转储。
我正在使用的内核 - Linux-boundary 4.1.15
Seg 故障核心转储 1
Program terminated with signal SIGSEGV, Segmentation fault.
#0 gcoTEXTURE_BindTextureEx (Texture=0x263c6c4, Target=Target@entry=0,
Sampler=1, Sampler@entry=0, Info=Info@entry=0x23f0708,
textureLayer=textureLayer@entry=0)
at gc_hal_user_texture.c:3804
3804 gc_hal_user_texture.c: No such file or directory.
Seg 故障核心转储 2
Program terminated with signal SIGSEGV, Segmentation fault.
#0 _SetFenceCtx (fence=0x5c30d6c, head=0x5c2ab74) at
gc_hal_user_hardware.c:5752
5752 gc_hal_user_hardware.c: No such file or directory.
1) 这些核心转储被定向到以下源文件。但是我在上面的 Linux 边界 4.1.15 内核版本中找不到这些文件。他们指的是什么?为了克服这个问题,您有什么建议?
gc_hal_user_texture.c
gc_hal_user_hardware.c
src/glcore/gc_es_draw.c:943
src/glcore/gc_es_api.c:399
2) 我可以在我的内核构建中找到一个名为 gc_hal_kernel_hardware.c 的文件。那么这是 gdb 回溯日志指出的文件吗?您对这种分段错误有任何想法吗?
【问题讨论】:
获取你在gc_hal_kernel_hardware.c
中找到的目录并直接在GDB 中的dir
命令中使用它,如下所示:dir theDirectory
运行 gdb bt
命令并查看堆栈中包含您编写的代码(或您可以修复的代码)的部分。
【参考方案1】:
阅读documentation of gdb
,尤其是9.5 Specifying Source Directories。因为你有一个core
转储它是一些user-space 应用程序崩溃(不是kernel;内核应该永远不会崩溃,不幸的是,当它发生时,你可能有一个冻结的系统)。另见signal(7)。你的gc_hal_user_texture.c
属于那个崩溃的application,或者它使用的一些library。
您可以使用file(1) 找出哪个程序产生了core
。运行file core
。另见core(5) & proc(5)。
请务必使用DWARF 调试信息和所有警告compile 那个程序,所以gcc -g -Wall -Wextra
阅读Operating Systems: Three Easy Pieces 了解原理(以及用户空间代码和操作系统内核代码之间的区别)。
但我在上面的 Linux 边界 4.1.15 内核版本中找不到这些文件。他们指的是什么?
这些gc_hal_user_texture.c
... src/glcore/gc_es_api.c
文件引用一些应用程序或库源代码(当然它们不是内核源文件)。
【讨论】:
以上是关于分析分段错误核心转储 (gdb)的主要内容,如果未能解决你的问题,请参考以下文章