如何在GDB脚本中编写每次命中特定brkpt时执行的命令?

如何在GDB脚本中编写每次命中特定brkpt时执行的命令?,gdb,Gdb,每次调用gdb时,我都需要调试一组特定的命令,所以我决定将它们放在我的.gdbinit中。一切都很好,直到我决定使用命令(每次点击某个brkpt时执行一组特定的gdb命令)。我的脚本如下所示: define setup handle SIGTRAP noprint nostop br 'Class1::Fun1(void)' run br 'Class2::Run(void)' c br Function2 commands 3 return

每次调用gdb时,我都需要调试一组特定的命令,所以我决定将它们放在我的.gdbinit中。一切都很好,直到我决定使用
命令
(每次点击某个brkpt时执行一组特定的gdb命令)。我的脚本如下所示:

define setup
   handle SIGTRAP noprint nostop
   br 'Class1::Fun1(void)'
   run
   br 'Class2::Run(void)'
   c
   br Function2
   commands 3
     return 0 
     c
   end
end

问题是,每当我一个接一个地执行它们时,它的行为都非常完美,但当我编写脚本并运行安装程序时,它在执行命令后的行为却异常(与以前的操作不同)


有人能帮忙吗?

您可能没有将命令放在您认为是的断点上

如果我是你,我会将脚本修改为以下内容:

define setup
   handle SIGTRAP noprint nostop
   br 'Class1::Fun1(void)'
   run
   br 'Class2::Run(void)'
   c
   br Function2
   commands
     return 0 
     c
   end
end

如果未给出断点目标,
命令
将与最近的断点关联。这样,无论您的gdb会话中有什么其他断点,您的命令都将与Function2上的断点相关联。

您能指定它在做什么吗?对我来说,设置这个函数并运行它就像预期的那样,即它在Class2::Run函数处停止,在Function2处设置断点,并附加命令。问题是您使用“命令3”并且不能假定Function2将是断点3?您可以使用不带参数的“命令”将命令设置为最后设置的断点。