我想只在远程gdb目标上刷代码,如果它自上次运行gdb后已经改变了。我在gdb脚本中设想了以下内容;
target extended-remote /dev/<device>
<Attach to Target>
file <Target Program>
if ![compare-sections -r]
load
start
...但是,我看不出如何对命令输出进行条件限制。
有人可以帮忙吗?我想我可能错过了什么,但我不知道是什么......
答案 0 :(得分:0)
compare-sections
命令不会返回可在if
语句中使用的值,但以下内容可能会执行您想要的操作。
首先,定义一个名为$cmdeval
的{{3}},它将执行gdb命令并将其输出作为字符串返回:
import gdb
class CmdEval(gdb.Function):
"""$cmdeval(str) - evaluate argument string as a gdb command
and return the result as a string.
"""
def __init__(self):
super(CmdEval, self).__init__("cmdeval")
def invoke(self, gdbcmd):
return gdb.execute(gdbcmd.string(), from_tty=False, to_string=True)
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 again\n
>end