前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GDB使用详解

GDB使用详解

作者头像
李海彬
发布2018-03-22 12:00:53
6.1K0
发布2018-03-22 12:00:53
举报

一、打开GDB

1、gdb filename

加载该文件到gdb

2、gdb

file filename

如果gdb filename失败,可以在打开gdb以后,通过file来加载调试文件

3、gdb -tui

file filename

带画面的调试

如果显示上图的信息说明,没有指定文件,或者没有调试信息。

*注意-g,在linux下用gcc编译时,如果不加-g,编译器会进行优化,就不会生成调试信息,无法调试,也可以使用-ggdb,这是gcc为gdb提供的更详细的调试信息,别的调试器无法使用。

二、常见命令

l(list):显示代码,list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12,list 函数名:将显示“函数名”所在函数的源代码,如:list main;

b(break):设置断点,参数可以是行数,函数名,也可以用文件名:行数或者文件名:函数名;

tb(tbreak):临时断点,参数和b的一样;

info b(i b/info break):查看断点,查看断点;

:如下图,通过b设置断点,如果要为断点指定源文件,使用b helloworld.c:10(源文件名:行数或者函数名),列Num的数字123是断点序号,Disp为keep的表示为普通断点,为del的则为临时断点,Enb是断点是否有效,y为有效,无效为n

clear n:清除第n行的断点; d (delete) n:删除第n个断点; disable n:暂停第n个断点; enable n:开启第n个断点;

:下图是删除断点和暂停开始和清楚的示例

r (run):执行程序;

s(step):有函数时,进入函数函数体,没有时,单步执行;

n (next):单步执行,不进入函数体;

c (continue):遇到断点以后,程序会阻塞,输入c可以让程序继续执行;

p (print):打印表达式,表达式可以是变量,也可以是操作,也可以是函数调用 print 1,print a+1 print f(a);

until:可以运行程序直到退出循环体;

finish:运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息;

watch:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序;

frame n:移动到指定的栈帧,并打印栈的信息,n为帧编号,如果不指定n,打印当前栈的信息;

set args 参数:指定运行时的参数;

show args:查看设置好的参数;

show paths:查看程序运行路径;set environment varname [=value] 设置环境变量。show environment [varname] 查看环境变量; cd 相当于shell的cd;

pwd :显示当前所在目录;

info program: 来查看程序的是否在运行,进程号,被暂停的原因;

bt(backtrace):查看堆栈信息,因为栈是后进先出,所以要从下往上看,最下面的是最先执行的函数;

threads:查看所有线程信息;

shell XXX:执行shell命令行,XXX为shell命令,如shell ls就执行shell里的ls命令;

thread n:切换线程,参数为线程号,可以通过threads查看,一般常用的是通过threads查看线程序号,通过thread n切换过去,再用bt查看线程栈的信息;

condition:给断点设置触发条件,比如b 10 if a > b与b 10然后condition 1 if a> b等价(假设b 10的断点号为1),取消断点条件用condition 断点号;

ignore:特殊断点条件,程序只有到达该断点指定次数以后才会触发,ignore 1 10,忽略断点号为1的断点10次以后才触发;

kill:将强行终止当前正在调试的程序;

help 命令:help 命令将显示“命令”的常用帮助信息;

call 函数(参数):调用“函数”,并传递“参数”,如:call gdb_test(55);

layout:用于分割窗口,可以一边查看代码,一边测试;

layout src:显示源代码窗口;

layout asm:显示反汇编窗口;

layout regs:显示源代码/反汇编和CPU寄存器窗口;

layout split:显示源代码和反汇编窗口;

display: 在每次单步进行指令后,紧接着输出被设置的表达式及值;

stepi或nexti:单步跟踪一些机器指令;

Ctrl + L:刷新窗口;

quit:简记为 q ,退出gdb;

回车:重复上一条命令;

执行下一步操作,注意命令行此时显示的并不是当前执行的操作,而是下一次要执行的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档