我只想做闪存的代码在一个远程gdb目标,如果它已经改变,因为上次运行gdb。我在gdb脚本中设想了类似以下的内容;
target extended-remote /dev/<device>
<Attach to Target>
file <Target Program>
if ![compare-sections -r]
load
start...however,我不明白如何对命令输出设置条件。
有人能帮上忙吗?我想我可能错过了什么,但我不知道是什么....
发布于 2017-04-07 03:02:38
compare-sections命令不会返回可以在if语句中使用的值,但是下面的命令可能会执行您想要的操作。
首先,定义一个名为$cmdeval的convenience function,它将执行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 again\n
>endhttps://stackoverflow.com/questions/43219115
复制相似问题