命令总结_gdb

来源:互联网 发布:炫浪网络不能在线阅读 编辑:程序博客网 时间:2024/05/29 07:11

gdb调试段错误

        调试Linux程序时,出现Segmentation Fault比较郁闷。这里采用Linux提供的core dump机制:当程序出现内存操作错误时,会发生崩溃,并产生核心文件(core文件)。使用GDB可以对产生的核心文件爱你进行分析,找出程序崩溃时候的调用堆栈信息。

gdb调试步骤

(1) 使用命令行手工输入命令编译,或者是利用makefile编译,都应该加上-g 选项。
(2) 一般而言,在默认情况下,程序崩溃时,core文件是不生成的,所以必须修改默认选项,在命令行执行: ulimit -c unlimited, 表示不限制生成的core文件大小。
(3) 运行程序,不管何种方式,重现Segmentation Fault错误。
(4) 此时,会发现在执行文件的同级目录下,生成了一个文件名为core的文件,即核心文件。
(5) 用GDB调试它,假设可执行文件名为 test,则命令行中执行:gdb test core。
(6) 输入并执行命令 bt (backtrace 查看函数堆栈)。

gdb查看core dump文件

(1) backtrace
bt 打印当前函数调用栈的所有信息
bt n 只打印栈顶上n层的栈信息
bt -n 只打印栈底下n层的栈信息

(2) 切换到某一层栈
如果要查看某一层的信息,需要切换当前栈。一般而言,程序结束,最顶层的栈就是当前栈,如果要查看栈下面的详细信息,首先要切换到当前栈。
f n n是一个从0开始的整数,是栈中的层编号。比如,0表示栈顶, 1表示栈的第二层。
up n 表示向栈的上面移动n层,可以不打n,表示向上移动一层。
down n 表示向栈的下面移动n层,可以不打n,表示向下移动一层。
f 打印当前栈顶的信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句等。
info f 打印更为详细的当前栈层的信息,只不过,大多数 都是运行时的内部地址。比如:函数地址、调用函数地址、被调用函数地址,函数参数地址、局部变量地址等等。
info args 打印当前函数的参数及其值
info catch 打印当前函数中异常处理信息
0 0