如果自上次运行 gdb 以来代码已更改,我只想在远程 gdb 目标上刷新代码。我在 gdb 脚本中设想了类似以下内容的内容;
target extended-remote /dev/<device>
<Attach to Target>
file <Target Program>
if ![compare-sections -r]
load
start
。但是,我看不到如何在命令输出上设置条件。
谁能帮忙?我想我可能错过了一些东西,但我不知道是什么......
compare-sections
命令不返回可在 if
语句中使用的值,但以下内容可能会执行您想要的操作。
首先,定义一个名为 $cmdeval
的便利函数,该函数将执行 gdb 命令并将其输出作为字符串返回:
import gdb
class CmdEval(gdb.Function):
"""$cmdeval(str) - evaluate argument string as a gdb command
and return the result as a string. Trailing newlines are removed.
"""
def __init__(self):
super(CmdEval, self).__init__("cmdeval")
def invoke(self, gdbcmd):
return gdb.execute(gdbcmd.string(), from_tty=False, to_string=True).rstrip('n')
CmdEval()
您可以将其放入名为 cmdeval.py
的文件中,然后键入 (gdb) source cmdeval.py
以将其加载到 gdb 中。
接下来,由于compare-sections
输出"MIS-MATCHED"
任何已更改的部分,您可以使用 $_regex
方便函数查找该字符串,该函数包含在最新版本的 gdb 中:
(gdb) if $_regex($cmdeval("compare-sections -r"),".*MIS-MATCHED.*")
>echo need to load againn
>end