是否可以从GDB中的外部文件中将命令注册到断点?

是否可以从GDB中的外部文件中将命令注册到断点?,gdb,Gdb,GDB允许通过commands NUM语法将一组命令注册到特定断点。我需要使用如下语法,通过外部文件注册特定断点的命令集: commands ./main.c:18 silent print buffer[0] cont end commands ./io.c:29 silent printf "Hello world %i\n", myvar1 cont end 命令路径/to/file:XX语法由我自己编写。由于commands NUM中的NUM语法需要断点的运行时I

GDB允许通过
commands NUM
语法将一组命令注册到特定断点。我需要使用如下语法,通过外部文件注册特定断点的命令集:

commands ./main.c:18
silent
print buffer[0]
cont
end

commands ./io.c:29
silent
printf "Hello world %i\n", myvar1
cont
end
命令路径/to/file:XX
语法由我自己编写。由于
commands NUM
中的
NUM
语法需要断点的运行时ID号(由GDB分配),因此我不能使用确定性语法来实现此目的

我目前正在通过包含以下内容的文本文件注册断点:

break ./main.c:18
break ./io.c:29
然后在GDB内部发出
sourcebreakpoints.txt
命令。在注册断点时,似乎无法同时注册
命令

(gdb)帮助突破 在指定的行或函数上设置断点。 断开[PROBE_MODIFIER][LOCATION][THREADNUM][if CONDITION] 如果命令要放在一个命令行中,则应出现PROBE_修饰符 探测点。接受的值为
-probe'(对于一般的、自动猜测的探针类型)、
-probe stap'(对于SystemTap探针)或 `-probe dtrace'(对于dtrace探测器)。 位置可以是行号、函数名或“*”和地址。 如果指定了行号,请在该行代码的开头断开。 如果指定了一个函数,则在该函数的代码开始处中断。 如果指定了地址,请在该确切地址处断开。 如果没有位置,则使用选定对象的当前执行地址 堆叠框架。这对于返回堆栈帧时断开非常有用

THREADNUM是“信息线程”中的数字。 条件是一个布尔表达式

允许在一个位置上有多个断点,如果断点 情况不同

问题:
  • 有没有简单的方法可以从文件中为预定断点设置一些预定命令
  • 如果没有,在gdb(版本5.3)中不可用时,是否有任何等效方法将
    (gdb)信息断点
    输出传递到文件或程序?目前,我正在尝试一种解决方法,为此目的使用该功能:
  • 有没有简单的方法可以从文件中为预定断点设置一些预定命令

    是:如果在不使用
    NUM
    的情况下使用
    命令
    ,则这些命令将应用于最后一个断点集。所以你想要的是:

    break main.c:18
    commands
    silent
    print buffer[0]
    cont
    end
    
    break main.c:18
    commands
    silent
    print buffer[0]
    cont
    end