创建条件断点时,如何使GDB用当前值替换变量

创建条件断点时,如何使GDB用当前值替换变量,gdb,Gdb,我希望GDB在创建条件断点时执行变量替换。例如: set variable $my_value = 1 b my_function if my_param == $my_value set variable $my_value = 5 b my_function if my_param == $my_value 这实际上会创建两个相同的断点,当my_param等于当前值$my_value时,这些断点会在my_函数()中中断。因此,在运行程序时,仅当my_param等于5时才会触发断点。我实际上

我希望GDB在创建条件断点时执行变量替换。例如:

set variable $my_value = 1
b my_function if my_param == $my_value
set variable $my_value = 5
b my_function if my_param == $my_value
这实际上会创建两个相同的断点,当my_param等于当前值$my_value时,这些断点会在my_函数()中中断。因此,在运行程序时,仅当my_param等于5时才会触发断点。我实际上想要的是两个不同的条件断点,用于值1和5

有没有办法让GDB使用便利变量的当前值而不是变量本身来设置这样的条件断点

我问这个问题是因为我试图创建一个GDB脚本来跟踪内存释放,它将自动设置条件断点,例如

# set breakpoint after malloc() statement of interest
b some_file.c:2238
# define commands to execute when the above breakpoint is hit
commands
# $last is set to the allocated memory address
set variable $last = new_pointer
# set conditional breakpoint in free() to check when allocated pointer is released
b free if ptr == $last
continue
end
当然,我发现这只适用于最后一个指针值,因为所有自动生成的断点都是相同的


我将研究Python脚本的使用,看看这是否可以解决我的问题,但由于我没有Python的经验,我想先发布这个问题!我确信我所要实现的应该是可能的,任何帮助或建议都将不胜感激。

使用
eval
命令(显然是在gdb 7.2和更高版本中)

为了完整性,下面是如何在我的原始示例中使用eval命令:

set variable $my_value = 1
eval "b my_function if my_param == %d", $my_value
set variable $my_value = 5
eval "b my_function if my_param == %d", $my_value

这将根据需要为值1和5生成两个断点

+1谢谢,我需要这个。举个例子可以改进这个答案。