gdb的自定义脚本写法

gdb支持命令脚本和python脚本,但是python脚本需要官方编译gdb时带上python支持才行,一般嵌入式的gdb不一定带,本文不讨论这个,仅讨论命令脚本。

GDB脚本(.gdb文件)本质上是GDB命令的序列 ,支持大多数GDB交互式命令以及专门的脚本控制命令。然后以sourcexx.gdb这样命令执行该脚本,以下是详细的语法和功能:

1. 每行一个命令 (分号分隔会报错),例如 break main 等标准命令都可以用,注释以#开头

如果一个命令分多行写,那么 用 \ 换行,反斜杠后不要有空格\ 后直接换行,不要留空格

2. 变量定义和赋值,set $var = 0

3. 打印命令:

print用于打印变量的值,例如print/x var # 十六进制格式,print/d var # 十进制格式(默认),输出为 1 = xx 的形式,也就是会自动生成一个历史变量 1,后续直接可以用这个变量

output类似print用于打印变量值,但是不会生成历史变量,直接打印结果

printf格式化打印,printf "ar1=%d, ar2=%d\n", 1, 2

display自动打印指定变量,每次程序暂停后,都会自动打印这些值(即一般用于监控变量用途),例如display var1,那么每次程序遇到断点等暂停时,都会自动打印var1的值,除非undisplay命令清理掉指定变量

ptype显示类型信息,ptype var # 显示变量类型,ptype struct_name # 显示结构体定义

echo用于输出纯文本,且不处理转义符,例如echo helloworld

4. 流程控制,不支持完全的程序控制结构(如switch-case)

复制代码
# if语句
if condition
    commands
else
    commands
end

# while循环
while condition
    commands
end

# loop_break和loop_continue(GDB 8.0+)
#set $i = 0
while $i < 10
    if $i == 5
        loop_break
    end
    print $i
    set $i = $i + 1
end

5. 用户自定义命令,然后命令行直接输入该命令名,即可执行,例如输入下面的mycmd

复制代码
define mycmd
    echo 开始执行自定义命令\n
    info registers
    x/10i $pc
end

# 带参数的命令
define print_args
    print $arg0
    print $arg1
end
# 使用:print_args 10 20

6. 日志文件控制(待验证

复制代码
# 设置日志文件名
set logging file mylog.txt

# 开启日志功能
set logging on

# 关闭日志功能
set logging off

# 设置为覆盖模式(清空文件)
set logging overwrite on

# 设置为追加模式(不清空)
set logging overwrite off

# 设置是否在终端显示(on=不显示,off=显示)
set logging redirect on




# 创建自定义日志函数
define mylog
  set logging on
  print $arg0
  set logging off
end

# 使用
mylog variable_name








# 创建一个完整记录流程
define full_log
  # 清空文件
  set logging file log.txt
  set logging overwrite on
  set logging on
  set logging off
  set logging overwrite off
  
  # 开始记录特定输出
  set logging redirect on
  set logging on
  
  # 记录时间戳
  shell date
  
  # 你的print命令
  print var1
  print var2
  print *ptr
  
  # 结束记录
  set logging off
  set logging redirect off
end



shell echo "Backtrace:" >> D:/file/project/Project4_hal_small/log.txt 这条命令能用
相关推荐
Lenyiin19 天前
《 Linux 修炼全景指南: 八 》别再碎片化学习!掌控 Linux 开发工具链:gcc、g++、GDB、Bash、Python 与工程化实践
linux·python·bash·gdb·gcc·g++·lenyiin
kali-Myon1 个月前
快速解决 Docker 环境中无法打开 gdb 调试窗口以及 tmux 中无法滚动页面内容和无法选中复制的问题
运维·安全·docker·容器·gdb·pwn·tmux
赖small强1 个月前
【Linux C/C++开发】 GCC -g 调试参数深度解析与最佳实践
linux·c语言·c++·gdb·-g
ベadvance courageouslyミ1 个月前
GDB相关操作
gdb
我在人间贩卖青春1 个月前
GDB调试方法及命令
gdb·调试·gdb调试
代码AC不AC2 个月前
【Linux】调试器 gdb / cgdb
linux·gdb·调试器·cgdb
岚天start3 个月前
Linux内核coredump分析方案
linux·运维·服务器·gdb·coredump·堆栈·内存快照
安全二次方security²3 个月前
CUDA-GDB(11)——调试示例演练
gdb·nvidia·cuda·调试·cuda-gdb·autostep·mpi cuda
子牙老师3 个月前
从零手写gdb调试器
c语言·linux内核·gdb·调试器