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 这条命令能用
相关推荐
ttkwzyttk12 天前
GDB TUI窗口管理
gdb
ttkwzyttk13 天前
GDB观察点与捕获点使用
gdb
ttkwzyttk18 天前
GDB函数调用栈管理
gdb
ttkwzyttk19 天前
GDB调试变量、内存与寄存器查看与修改
gdb
ttkwzyttk20 天前
GDB调试简介与调试配置
gdb
modelmd1 个月前
GDB 摘要
gdb
源分享1 个月前
GDB下载和安装保姆级教程
gdb
modelmd1 个月前
翻译 GDB 官方文档
gdb
kidwjb2 个月前
一次多进程信号量同步失效的排查实录
gdb·进程通信·信号量
炘爚2 个月前
C++11实现线程池:项目实现过程的报错与gdb调试
stl·gdb·shared_ptr