基于内存地址的Gdb条件步骤?

基于内存地址的Gdb条件步骤?,gdb,Gdb,我想知道是否有可能创建一个脚本,根据内存地址值一步一步地(在中断后)继续执行程序。 因此,如果我正在跟踪一个函数,它进入了一个高内存值,我会调用gdb脚本,直到内存值低于一个设定值——然后它会再次中断 我对gdb很陌生,还在阅读手册/教程,但我想知道我的目标是否可行:)-如果你能让我找到正确的方向,那就更好了;) 谢谢 编辑,使用伪代码更新: while (1) { cma = getMemoryAddressForCurrentInstruction(); if (cma &g

我想知道是否有可能创建一个脚本,根据内存地址值一步一步地(在中断后)继续执行程序。 因此,如果我正在跟踪一个函数,它进入了一个高内存值,我会调用gdb脚本,直到内存值低于一个设定值——然后它会再次中断

我对gdb很陌生,还在阅读手册/教程,但我想知道我的目标是否可行:)-如果你能让我找到正确的方向,那就更好了;)

谢谢

编辑,使用伪代码更新:

while (1) {
    cma = getMemoryAddressForCurrentInstruction();
    if (cma > 0xdeadbeef) {
        stepi;
    } else {
        break;
    }
}
您正在谈论的是(有时称为指令指针)。它在gdb中作为
$pc
提供。您的伪代码可以转换为实际的gdb命令:

while $pc <= 0xdeadbeef
    stepi
将一直运行,直到程序计数器点击0xf0abcdef(有时称为指令指针)。它在gdb中作为
$pc
提供。您的伪代码可以转换为实际的gdb命令:

while $pc <= 0xdeadbeef
    stepi

将一直运行,直到程序计数器达到0xf0abcdef

“内存地址值”是模糊的,但我认为您正在寻找一个观察点<代码>监视*(int*)0x12345678例如,监视地址0x12345678处的int。然后你就可以
cont
这个程序,它会一直运行,直到那个值改变为止。@AlanCurry:我用伪代码更新了这个问题,我想“内存地址值”是模糊的,但我想你在寻找一个观察点<代码>监视*(int*)0x12345678例如,监视地址0x12345678处的int。然后你就可以
cont
这个程序,它会一直运行,直到那个值改变为止。@AlanCurry:我用伪代码更新了这个问题,说明了我想实现什么