一、用途
如果程序崩溃后产生了core dump文件,gdb可以通过分析core dump文件,找出程序crash的位置,调用堆栈等用于找出问题原因的关键信息
二、 启动GDB的几种方式
1.使用GDB加载程序,在GDB命令行启动运行
这是经典的使用GDB的方式。程序可以通过GDB命令的参数来加载,也可以在进入GDB控制台后,通过file命令来加载。
2.附加GDB到运行中的进程
GDB可以直接通过参数的方式,附加到一个运行中的进程。也可以在进入GDB控制台后,通过attach命令附加到进程。
需要注意的是一个进程只允许附加一个调试进程,如果被调试的进程当前已经出于被调试状态,那么要么通过detach命令来解除另一个GDB进程的附加状态,要么强行结束当前附加到进程的GDB进程,否则不能通过GDB附加另一个调试进程。
通过GDB命令附加到进程gdb --pid [pid]# 在GDB控制台内,通过attach命令附加的进程gdb(gdb) attach [pid]
3.调试core文件
在程序Crash后,如果生成了core文件,我们可以通过GDB加载core文件,调试发生异常时的程序信息。core文件是没有限制当前机器相关信息的,我们可以拷贝core文件到另一台机器进行core分析,但前提是产生core文件的程序的符号表,需要和分析core文件时加载的程序的符号表保持一致。
使用GDB调试core文件
使用GDB加载core文件进行异常调试gdb [program] --core [core file]
4.使用GDB加载程序并自动运行
在自动化测试场景中,需要程序能够以非中断的方式流畅地运行,同时又希望附加GDB,以便随时可以了解程序的状态。这时我们可以使用–ex参数,指定GDB完成程序加载后,自动运行的命令。
三、常用
查看堆栈信息
当程序崩溃可以使用,where命令,查看死在那个位置。
bt,查看函数栈
f/frame 切换到当前调用线程的指定堆栈
f 2 进入第2栈
查看线程
i threads 【查看所有线程】
t num 【进入num线程】
thread 【查当前线程】
thread 2 【切换到第二个线程】
显示源码
查看源码:list(l),默认显示10行
l 函数名
l 数组