美文网首页linux深入
gdb常用调试命令

gdb常用调试命令

作者: 江河湖海洋 | 来源:发表于2022-10-18 15:35 被阅读0次

gdb 程序名 :用gdb启动程序
run argv[1] argv[2]: 调试时命令行传参
set args argv[1] argv[2] :设置运行参数
show args:查看运行参数

gdb attach 程序pid : 用gdb调试正在运行的程序
gdb -args 程序名 argv[1] argv[2] : 用gdb启动带参数的程序
gdb 程序名 core文件:gdb调试core文件:

set print elements 0 :gdb调试设置打印全部字符串长度
show print elements
until : gdb 结束当前循环
r(run) :重新开始运行文件
start : 单步执行,停在第一执行语句
l(list): 查看源代码(list n,从第n行开始查看代码, list 函数名:查看具体函数名)
set :设置变量的值
n(next) :单步调试(逐过程)
s(step):单步调试(逐语句)
bt(backtrace):查看函数的调用堆栈和层级关系
f(frame): 切换函数的栈帧
info或locals:查看函数内部局部变量的数值
finish:结束当前函数,返回到函数调用点
c(continue):继续运行
p(print):打印值及地址
b(break)+num:在第num行设置断点
b(break)+函数名:在某个函数头设置断点
b(break)...if...:设置条件断点
info breakpoints:查看当前设置的所有断点
delete breakpoints num:删除第num个断点
display 变量名:追踪查看具体变量值
undisplay:取消追踪观察变量
watch:被设置观察点的变量发生修改时,打印显示
watch i:显示观察点
enable breakpoints:启用断点
disable breakpoints:禁用断点
x:查看内存
x(examine)/[n][f][u] addr:查看变量在对应内存地址中的值
可选参数n表示要打印的内存单元个数,默认值为1,f表示上面介绍的各种格式的控制符,u表示要打印的内存单元长度,addr表示变量的内存地址
x/20xw : 显示20个单元,16进制,4字节每单元
dir dirname:指定源目录
file 文件名:加载文件
ptype:显示变量的类型
info threads :查看可切换调试的线程:
thread 线程id :切换调试的线程:
set scheduler-locking on :只运行当前线程:
set scheduler-locking off :运行全部的线程:
thread apply 线程id gdb_cmd : 指定某线程执行某gdb命令
thread apply all gdb_cmd :全部的线程执行某gdb命令
break xxx thread ID :为某个线程设置断点
set scheduler-locking step: 当单步执行某一线程时,其它线程不会执行,同时保证在调试过程中当前线程不会发生改变。
但如果该模式下执行 continue、until、finish 命令,则其它线程也会执行,并且如果某一线程执行过程遇到断点,则 GDB 调试器会将该线程作为当前线程。
NOTE:只有线程创建之后这个命令的暂停效果才有效,比如set scheduler-locking on开启之后,但pthread_create语句还没执行,这时执行continue后边创造的线程不会被暂停,必须等线程创造后再执行coneinue。
info proc :显示当前程序可执行文件相关信息(name,pwd)

examine(简写是x)命令使用说明来查看内存地址中的值。
x命令的语法如下所示:
x/<n/f/u> <addr> : n、f、u是可选的参数。
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。

f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

x/4xb &len 从len的首地址开始, 打印4个字节, 以16进制的形式。

相关文章

  • gdb调试基本方法

    gdb调试基本方法 gdb调试常用命令 在GDB中运行程序 断点(BreakPoint) 观察点(WatchPoi...

  • GDB调试

    使用GDB调试配置环境参数: Attach进程: Debug GDB常用方法(1)常用的命令,以拍照为例拍照函数在...

  • GDB学习笔记

    本文介绍使用gdb调试程序的常用命令。 简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果...

  • 关于Runtime

    lldb(gdb)常用的调试命令? po:打印对象,会调用对象description方法。是print-objec...

  • iOS知识原理篇二

    lldb(gdb)常用的调试命令? po:打印对象,会调用对象description方法。是print-objec...

  • 面试 (六) : 原理篇/2

    lldb(gdb)常用的调试命令? • po:打印对象,会调用对象description方法。是print-obj...

  • 面试 基础(五)原理篇2

    lldb(gdb)常用的调试命令?• po:打印对象,会调用对象description方法。是print-obje...

  • 4. iOS面试题原理篇2

    lldb(gdb)常用的调试命令? po:打印对象,会调用对象description方法。是print-objec...

  • GDB使用指南

    gdb是linux下的一款动态调试工具,以下是使用gdb调试程序常用到的命令,我尽量以图文的方式进行讲解,希望对初...

  • 2021年OC高阶面试题集锦

    一、lldb(gdb)常用的调试命令? 1> po:打印对象,会调用对象 description 方法。是 pri...

网友评论

    本文标题:gdb常用调试命令

    本文链接:https://www.haomeiwen.com/subject/cwiezrtx.html