首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程目标的GDB脚本流控制

远程目标的GDB脚本流控制
EN

Stack Overflow用户
提问于 2017-04-05 07:00:12
回答 1查看 412关注 0票数 1

我只想做闪存的代码在一个远程gdb目标,如果它已经改变,因为上次运行gdb。我在gdb脚本中设想了类似以下的内容;

代码语言:javascript
复制
target extended-remote /dev/<device>
<Attach to Target>
file <Target Program>
if ![compare-sections -r]
    load
start

...however,我不明白如何对命令输出设置条件。

有人能帮上忙吗?我想我可能错过了什么,但我不知道是什么....

EN

回答 1

Stack Overflow用户

发布于 2017-04-07 03:02:38

compare-sections命令不会返回可以在if语句中使用的值,但是下面的命令可能会执行您想要的操作。

首先,定义一个名为$cmdevalconvenience function,它将执行gdb命令并将其输出作为字符串返回:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
(gdb) if $_regex($cmdeval("compare-sections -r"),".*MIS-MATCHED.*")
 >echo need to load again\n
 >end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43219115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档