分析分段错误核心转储 (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)的主要内容,如果未能解决你的问题,请参考以下文章

分段错误(核心转储)

分段错误 - 如何调试? [关闭]

在Linux机器上运行C代码时出现分段错误(核心转储)[关闭]

运行我的代码时出现分段错误(核心转储)问题

pyqt5 中的分段错误(核心转储)

编程求解器的分段错误(核心转储)