gdb常用命令
2012-08-28 20:39
274 查看
1.在gdb中运行程序
gdb <program>
gdb <program> PID
attach PID #附加到进程上进行调试
detach PID #取消附加
quit(q) #退出gdb
run(r) #运行程序
2.查看运行信息
show args #查看设置好的运行参数
set args #设置运行时参数
pwd #显示当前目录
show paths #查看程序运行路径
3.调试
next(n) #单步调试(不进入)
step(s) #单步调试(进入)
print(p) #打印变量
backtrace(bt) #查看函数堆栈
finish #退出函数
continue(c) #继续
4.中断程序运行方式
在gdb中,可以使用以下几种方式来暂停程序的执行
断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)和线程停止(Thread Stops)
如果恢复程序的运行可以使用continue(c)
5.断点
break(b) 文件名::行号/函数名 类::函数名 #加断点
info break(i b) #查看断点信息
clear 行号/函数名 #清除断点
clear #清除所有断点
disable 断点序号 #disable断点
enable 断点序号 #enable断点
delete breakpoint 断点序号
delete breakpoint #删除所有断点
6.信号
信号:信号是软件时将上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的,信号是异步的。
Unix常用信号
SIGINT:中断字符信号,也就是Ctrl+C的信号
SIGBUS:硬件故障的信号
SIGCHLD:子进程状态改变信号
SIGKILL:终止程序运行信号
handle <signal> <keywords...> #定义一个信号处理
<keywords...>:nostop stop print noprint ...
info signals
info handle
signal <singal> #产生一个信号量给被调试的程序
7.线程
break <linespec> thread <threadno>
info threads #查看正在运行程序的线程信息
8.查看相关信息
info args #打印当前函数参数名及值
info locals #打印当前函数中所有局部变量及值
info catch #打印当前函数中的异常处理信息
backtrace(bt) #打印当前的函数调用栈的所有信息
backtrace(bt) <n> #查看n层栈的信息
print(p)/<进制标识> <expr> #显示表达式的值
print x=4 #设置变量值
进制标识
x:16进制
d:10进制
o:8进制
t:2进制
c:字符格式
examine(x) <addr> #查看内存
display <expr> #设置自动显示
undisplay <disnums...> #删除自动显示
delete display <disnums...> #删除自动显示
disable display <disnums...> #disable自动显示
enable display <disnums...> #enablee自动显示
info display
show language #查看当前语言环境
info source
whatis #识别数组或变量的类型
ptype #比whatis的功能更强,他可以提供一个结构的定义
9.显示源程序
list <linenum> #显示第linenum行的周围的源程序
list <function> #显示函数名为function的函数的源程序
list #显示当前行后面的源程序
list - #显示当前行前面的源程序
set listsize <count> #设置一次显示源代码的行数
show listsize #显示一次显示源代码的行数
list <first>,<last> #显示first到last之前的源代码
forward-search <regexp> #向前搜索
search <regexp> #向后搜索
file <fileName> #切换可执行文件(未确认)
list <fileName>:<lineNo> #切换源文件(未确认)
10.指定源文件的路径
directory(dir) <dirname...> #加一个源文件路径到当前路径的前面
directory #清除所有的自定义的源文件搜索路径信息
show directories #显示定义了的源文件搜索路径
11.源代码的内存
info <linenum> <filename>:<func> #显示源代码在内存中的地址
disassemble '文件名'::func #显示汇编代码
12.环境变量
set $varName=val #第一次创建时按照此方式进行,以后直接访问即可
13.寄存器
info registers #不包括浮点寄存器
info all-registers #包括浮点寄存器
info registers <regname...>
14.程序的跳转
jump <linespec> #跳转执行
jump <address>
return #强制函数返回
return <expr>
call <expr> #强制调用函数
15.堆栈
backtrace(bt) #查看所有堆栈
frame(f) #选中并查看某层堆栈
gdb <program>
gdb <program> PID
attach PID #附加到进程上进行调试
detach PID #取消附加
quit(q) #退出gdb
run(r) #运行程序
2.查看运行信息
show args #查看设置好的运行参数
set args #设置运行时参数
pwd #显示当前目录
show paths #查看程序运行路径
3.调试
next(n) #单步调试(不进入)
step(s) #单步调试(进入)
print(p) #打印变量
backtrace(bt) #查看函数堆栈
finish #退出函数
continue(c) #继续
4.中断程序运行方式
在gdb中,可以使用以下几种方式来暂停程序的执行
断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)和线程停止(Thread Stops)
如果恢复程序的运行可以使用continue(c)
5.断点
break(b) 文件名::行号/函数名 类::函数名 #加断点
info break(i b) #查看断点信息
clear 行号/函数名 #清除断点
clear #清除所有断点
disable 断点序号 #disable断点
enable 断点序号 #enable断点
delete breakpoint 断点序号
delete breakpoint #删除所有断点
6.信号
信号:信号是软件时将上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的,信号是异步的。
Unix常用信号
SIGINT:中断字符信号,也就是Ctrl+C的信号
SIGBUS:硬件故障的信号
SIGCHLD:子进程状态改变信号
SIGKILL:终止程序运行信号
handle <signal> <keywords...> #定义一个信号处理
<keywords...>:nostop stop print noprint ...
info signals
info handle
signal <singal> #产生一个信号量给被调试的程序
7.线程
break <linespec> thread <threadno>
info threads #查看正在运行程序的线程信息
8.查看相关信息
info args #打印当前函数参数名及值
info locals #打印当前函数中所有局部变量及值
info catch #打印当前函数中的异常处理信息
backtrace(bt) #打印当前的函数调用栈的所有信息
backtrace(bt) <n> #查看n层栈的信息
print(p)/<进制标识> <expr> #显示表达式的值
print x=4 #设置变量值
进制标识
x:16进制
d:10进制
o:8进制
t:2进制
c:字符格式
examine(x) <addr> #查看内存
display <expr> #设置自动显示
undisplay <disnums...> #删除自动显示
delete display <disnums...> #删除自动显示
disable display <disnums...> #disable自动显示
enable display <disnums...> #enablee自动显示
info display
show language #查看当前语言环境
info source
whatis #识别数组或变量的类型
ptype #比whatis的功能更强,他可以提供一个结构的定义
9.显示源程序
list <linenum> #显示第linenum行的周围的源程序
list <function> #显示函数名为function的函数的源程序
list #显示当前行后面的源程序
list - #显示当前行前面的源程序
set listsize <count> #设置一次显示源代码的行数
show listsize #显示一次显示源代码的行数
list <first>,<last> #显示first到last之前的源代码
forward-search <regexp> #向前搜索
search <regexp> #向后搜索
file <fileName> #切换可执行文件(未确认)
list <fileName>:<lineNo> #切换源文件(未确认)
10.指定源文件的路径
directory(dir) <dirname...> #加一个源文件路径到当前路径的前面
directory #清除所有的自定义的源文件搜索路径信息
show directories #显示定义了的源文件搜索路径
11.源代码的内存
info <linenum> <filename>:<func> #显示源代码在内存中的地址
disassemble '文件名'::func #显示汇编代码
12.环境变量
set $varName=val #第一次创建时按照此方式进行,以后直接访问即可
13.寄存器
info registers #不包括浮点寄存器
info all-registers #包括浮点寄存器
info registers <regname...>
14.程序的跳转
jump <linespec> #跳转执行
jump <address>
return #强制函数返回
return <expr>
call <expr> #强制调用函数
15.堆栈
backtrace(bt) #查看所有堆栈
frame(f) #选中并查看某层堆栈