这可以算是一条规律,如果某个函数的局部变量发生访问越界,有可能并不立即产生段错误,而是在函数返回时产生段错误 。
表 10.1. gdb 基本命令1
命令 |
描述 |
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 ) |
执行下一行语句,如果有函数调用则进入到函数中 |
表 10.2. gdb 基本命令2
命令 |
描述 |
break (或b ) 行号 |
在某一行设置断点 |
break 函数名 |
在某个函数开头设置断点 |
break ... if ... |
设置条件断点 |
continue (或c ) |
从当前位置开始连续运行程序 |
delete breakpoints 断点号 |
删除断点 |
display 变量名 |
跟踪查看某个变量,每次停下来都显示它的值 |
disable breakpoints 断点号 |
禁用断点 |
enable 断点号 |
启用断点 |
info (或i ) breakpoints |
查看当前设置了哪些断点 |
run (或r ) |
从头开始连续运行程序 |
undisplay 跟踪显示号 |
取消跟踪显示 |
表 10.3. gdb 基本命令3
命令 |
描述 |
watch |
设置观察点 |
info (或i ) watchpoints |
查看当前设置了哪些观察点 |
x |
从某个位置开始打印存储单元的内容,全部当成字节来看,而不区分哪个字节属于哪个变量 |
http://learn.akae.cn/media/ch10s01.html