有没有办法使用纯 gdb 脚本来测试我们是不是在断点上?

Posted

技术标签:

【中文标题】有没有办法使用纯 gdb 脚本来测试我们是不是在断点上?【英文标题】:Is there a way to test for whether we are on a breakpoint, using pure gdb scripting?有没有办法使用纯 gdb 脚本来测试我们是否在断点上? 【发布时间】:2014-07-02 08:41:51 【问题描述】:

我正在尝试使用this answer 在两行代码之间生成指令跟踪。

不幸的是,while 循环中的条件是一个简单的计数,我需要继续运行循环,直到到达源代码中的特定代码行。

是否存在一种方法来检查我们是否在纯 gdb 脚本中的特定代码行或特定断点处?

我知道使用 Python API 的解决方案 here。我也知道pin-instat,但我想知道这是否可以用纯 gdb 完成。

【问题讨论】:

如果 1) 使用 info line 或使用 disas /m 获取有关特定代码行地址的信息以及何时 2) while $pc != ADDRESS | si | end ?.这样,您将继续运行循环,直到到达源代码中的特定代码行。 【参考方案1】:

如果以这种方式做你想做的事会怎样

1) 获取您想要到达的线路的pc 信息

使用info linedisas /m 获取有关特定代码行地址的信息。

2) 编写与Tracing/profiling instructions类似的循环

 while $pc != ADDRESS-FROM-FIRST-STEP
   si 
 end. 

这样你将一直运行循环,直到到达源代码中的特定代码行

【讨论】:

使用在大多数系统上启用的 ASLR,地址会随着运行而改变。顺便说一句,我本来打算回复评论,但我忘记了。 1) 你在gdb 下运行,不是吗?可以使用set disable-randomization 在 gdb 下禁用随机化。 2) Linux 上的 ASLR 可以有三个可能的值。在我的计算机上,它的值为 2,当我运行程序时,函数的地址似乎相同,但堆的地址不同。

以上是关于有没有办法使用纯 gdb 脚本来测试我们是不是在断点上?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在运行更新脚本之前检测 Microsoft Teams 是不是正在使用?

性能测试脚本新玩法---fiddler&&Jmeter

GDB怎么调试使用.sh(shell脚本)启动的程序?(未完成,待测试)

GDB怎么调试使用.sh(shell脚本)启动的程序?(未完成,待测试)

GDB 没有停止 python 脚本中的“中断”命令

深入LUA脚本语言,让你彻底明白调试原理