开发者
资源
使用GDB调试软件运行coredump
使用GDB调试软件运行coredump
发表于2023/09/21
1.4k8

分析手段:

coredump机制:coredump是一种基于异步信号的内存信息捕获机制,可以提供用户态的内存信息镜像,方便开发者分析使用,是常用的调试手段,具体流程如下图:

cke_113635.png

1. 应用程序在执行过程中某些严重错误(比如:访问非法内存地址,非法硬件指令等)导致内核产生crash信号。

2. 信号处理函数do_coredump判断是否满足coredump条件,如当前进程是否已打开dumpable属性。

3. 确认条件满足,创建core文件,并调用core_dump函数收集当前进程的现场信息。

4. 将相关信息以ELF文件格式保存在core文件中。

工具介绍:

GDB是GNU开源组织发布的一个强大的UNIX及类UNIX环境下的用户态程序调试工具,是C/C++程序调试的主流工具。大部分OS中已涵盖gdb,可直接使用dnf/yum install安装

使用方法:

1、直接调试应用程序

gdb program

说明:program为待调试的可执行文件。

2、调试应用程序的core文件

gdb program core

说明:core为程序非法执行后core dump后产生的文件。

3、GDB调试运行中的程序

gdb program $PID

说明:PID为需要调试的程序PID号。

4、GDB调试命令

(gdb) command *args

说明:上述三种方式进入GDB调试页面,会出现(gdb),command是需要执行的调试命令(部分命令有简写),*args是部分调试命令需要的参数。

5、常用参数如下:

命令

用途

r

运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。

c

继续执行,到下一个断点处。

n

单步跟踪程序,当遇到函数调用时,不进入此函数体,直接调用函数。

s

单步调试如果有函数调用,则进入函数。

until

运行程序直到退出循环体。

finish

运行程序,直到当前函数完成返回。

call

用程序中可见的函数,并传递“参数”。

l

查看源码;list n 查看n行前后10行;list func 查看函数源码。

b n

在n行处加断点。

b func

在函数func()的入口处设置断点。

clear n

清除第n行的断点。

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞