使用gdb调试
Posted caiminfeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用gdb调试相关的知识,希望对你有一定的参考价值。
启用gdb进行调试二进制程序,必须在二进制程序在采用gcc或g++编译时加入-g参数
启动gdb进行调试的几种形式:
直接启动gdb程序进行调试program程序
gdb program
启动gdb挂载入进程号为pid的进程进行调试,挂载后gdb会暂停该进程的执行
gdb -p pid
若程序运行崩溃产生了coredump文件,可采用该方式进行调试
gdb program coredumpfile
带入相应的参数启动gdb调试program程序
gdb --args program arg1 arg2
进入gdb后,使用相应的命令进行调试,常用命令包括:
命令 | 简写 | 作用 |
---|---|---|
运行相关 | ||
run | r | 开始运行程序 |
continue | c | 继续运行,直到遇到断点或者程序结束 |
next | n | 同栈帧内单步执行,即不进入函数调用中 |
step | s | 单步执行,如遇函数则进入函数调用中 |
finish | 执行至当前栈帧结束返回 | |
quit | 推出gdb | |
打印相关 | ||
backtrace | bt | 打印当前栈帧信息 |
print arg | p | 打印当前栈帧中变量arg的值 |
list | l | 打印当前执行点附近的代码 |
info thread | i t | 打印进程内所有线程的顶层栈信息 |
info breakpoints | i b | 打印设置的所有断点 |
info locals | 打印当前栈帧中所有局部变量的值 | |
断点相关 | ||
break filename:line | b | 在文件名为filename的第line行设置断点 |
delete n | del | 删除第n个断点 |
disable n | dis | 停用第n个断点 |
enable n | en | 启用第n个断点 |
ignore n cnt | 忽略断点n共cnt次 | |
切换相关 | ||
frame n | f | 跳转至第n个栈帧 |
thread n | 跳转至第n个线程 | |
其它 | ||
thread apply all cmd | 所有线程执行cmd命令 | |
thread apply n1 n2 cmd | 线程n1和n2执行cmd命令 |
以上是关于使用gdb调试的主要内容,如果未能解决你的问题,请参考以下文章