有没有办法使用纯 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 line
或disas /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 是不是正在使用?
GDB怎么调试使用.sh(shell脚本)启动的程序?(未完成,待测试)