linux开发之gdb记录

简述

GDB, the GNU Project debugger, allows you to see what is going on 'inside' another program while it executes -- or what another program was doing at the moment it crashed.
GDB, GNU项目调试器,允许你看到在另一个程序执行时“内部”发生了什么——或者另一个程序在崩溃时正在做什么。

gdb

使用

准备工作

要想使用gdb进行源码级别的调试,需要用gcc编译(不是链接)时候加上-g选项。这样调试生成的程序才能够显示源码,否则只能进行汇编级别的调试。

通常进行编译时候不止加入-g,还会关闭编译器优化-O。另外,-Wall可以在编译时候发现一些问题,避免一些不必要的bug。

开始

首先通过gdb 程序名来启动gdb去调试该程序。

命令 说明 示例
基本
q/quit 退出
help 帮助,可具体指定哪个命令 help info
set args 参数... 给程序设置参数 set args 1 2
show args 显示当前
start 程序运行并停在第一行
r/run 程序运行并到断点才停止
c/continue 继续运行直到下一个断点
n/next 执行一条一句(不会进入函数体)
s/step 执行一条一句(进入函数体)
until 继续运行至退出循环或遇到下一个断点
finish 继续运行至跳出函数体或遇到下一个断点
查看代码相关
l/list 显示当前文件代码
l 行号 显示指定行号前后文 list 10
l 函数名 显示指定函数 list main
l 文件名:行号 显示指定文件代码 list ot.cpp:1
l 文件名:函数名 显示指定文件代码 list ot.cpp:fun
show list/listsize 显示list时候的行数
set list/listsize 行数 设置list时候显示的行数 set list 20
断点
b/break 行号 在当前文件指定行打断点 b 10
b 函数名 在当前文件指定函数打断点 b fun
b 文件名:行号 在指定文件指定行打断点 b ot.cpp:10
b 文件名:函数名 在指定文件指定函数打断点 b ot.cpp:fun
b 位置 if 条件 设置条件断点(一般用于循环位置) b 23 if i==2
i/info b 查看断点信息
d/del/delete 断点编号 删除指定断点 d 2
dis/disable 断点编号 使指定断点无效 dis 2
ena/enable 断点编号 使指定断点生效 ena 2
变量
p/print 变量名 打印变量值 p var
ptype 变量名 打印变量类型 ptype var
set var 变量名=值 设置变量值 set var i=6
display 变量名 每次暂停自动打印变量的值 display var
i/info display 查看自动打印变量列表
undisplay 编号 取消自动打印 undisplay 2
posted @ 2023-04-14 17:47  1v7w  阅读(70)  评论(0编辑  收藏  举报