gdb和coredump

来源:互联网 发布:喇叭主升浪指标源码 编辑:程序博客网 时间:2024/06/06 14:20


编译时加-g选项,如:
cc -g hello.c -o hello
g++ hw.cpp -g -o hw

gdb在线参考:http://sourceware.org/gdb/current/onlinedocs/gdb/

启动GDB的方法有以下几种:
1、gdb <program>
program也就是你的执行文件,一般在当前目录下。
2、gdb <program> core
用gdb同时调试一个运行程序和core文件(core dump后产生的文件)。
3、gdb <program> <PID>
如果你的程序是后台程序,那么你可以指定这个程序运行时的进程ID。gdb会自动attach上去,并调试他。

设置断点:
break 10    
break test.c:10
break main
break 行号 if 条件 

开始运行
start

跳转到断点
continue
c
run
r

我们也可以用watch命令来观察变量,如果变量的值发生变化,程序就会停止
watch b

删除断点
delete  行号

退出gdb
quit

查看断点信息
info b

backtrace(或bt) 查看各级函数调用及参数
finish 连续运行到当前函数返回为止,然后停下来等待命令
frame(或f) 帧编号 选择栈帧
info(或i) locals 查看当前栈帧局部变量的值
list(或l) 列出源代码,接着上次的位置往下列,每次列10行
list 行号 列出从第几行开始的源代码
list 函数名 列出某个函数的源代码
next(或n) 执行下一行语句
print(或p) 打印表达式的值,通过表达式可以修改变量的值或者调用函数
quit(或q) 退出gdb调试环境
set var 修改变量的值
start 开始执行程序,停在main函数第一行语句前面等待命令
step(或s) 执行下一行语句,如果有函数调用则进入到函数中

-------------------------------------------------------------------------------------
实际工作中cordump时必不可少的:
开:当前终端生效:
ulimit -c unlimited 来开启 core dump 功能,并且不限制 core dump 文件的大小; 如果需要限制文件的大小,将 unlimited 改成你想生成 core 文件最大的大小,注意单位为 blocks(KB)。
查:查看当前是否已经打开了此开关
通过命令:ulimit -c 如果输出为 0,则代表没有打开。如果为unlimited则已经打开了,就没必要在做打开。
取消:ulimit -c 0 就可以了

永久生效:
1.可以修改文件/etc/bash.bashrc文件,添加一行ulimit -c unlimited,然后执行命令source /etc/bash.bashrc生效。此时通过ulimit -a查看:
2.命令加入/etc/profile文件

可选:
还可以通过修改/proc/sys/kernel/core_pattern 来控制生成 core 文件保存的位置以及文件名格式。

调试:
GDB中键入bt,就会看到程序崩溃时堆栈信息(当前函数之前的所有已调用函数的列表(包括当前函数)),注意编译时的-g选项

原创粉丝点击