gpt4 book ai didi

unit-testing - 如何编写 gdb 脚本(使用 python)?示例添加断点,运行,我们碰到了什么断点?

转载 作者:行者123 更新时间:2023-12-03 23:27:19 40 4
gpt4 key购买 nike

我正在尝试使用 gdb 创建一个小单元测试,
对于由 OpenOCD 控制的嵌入式 mcu (这让我可以通过 gdb 服务器控制我的目标)。

所以我想用 gdb 的一些脚本来自动化这个。

我想为 gdb 编写某种脚本,或多或少是这样做的:

  • 添加几个断点
  • 启动程序
  • 当我们停止时,它在哪里停止(获取帧信息)
  • 退出。

  • 有任何想法吗?

    关于如何在 python gdb 脚本中执行此操作的示例会很好。

    谢谢
    约翰

    笔记:

    假设我们有这个基本结构,
    或多或少进入 test_failed() 或 test_success()
    取决于函数 start_test() 返回的内容。
    void test_failed() {    
    while(1);
    }

    void test_success() {
    while(1);
    }

    int main(void) {
    int status = start_test();

    if( status > 0 ) {
    test_failed();
    }
    test_success();

    while(1);
    }

    在 gdb 中手动执行此操作非常困难,
    (gdb) break test_success
    Breakpoint 1 at 0x20: file src/main.c, line 9.
    (gdb) break test_failed
    Breakpoint 2 at 0x18: file src/main.c, line 5.
    (gdb) cont
    Continuing.

    Breakpoint 1, test_success () at src/main.c:9
    9 while(1);
    (gdb) frame
    #0 test_success () at src/main.c:9
    9 while(1);
    (gdb)

    所以我尝试的下一步是将这些 gdb 命令添加到 gdb 启动脚本中,该脚本或多或少看起来像这样。
    break test_success
    break test_failed
    target remote localhost:3333
    cont
    frame

    并开始
    arm-none-eabi-gdb --batch --command=commands.gdb main.elf

    而这种作品,却不是很好。
    我如何使用“新的和酷的”python 脚本来做到这一点,
    gdb 似乎支持。

    最佳答案

    仅供引用,最近的 gdb 版本可以在 Python 中编写脚本。您可以从 gdb 命令行调用 python 代码。这打开了一个全新的世界,查看相关文档。从命令行运行:

     dnf/yum/apt-get install gdb-doc
    info gdb extending python

    如果您不喜欢基于文本的信息浏览器,这里有一个(其中之一?)替代的图形浏览器:
    yelp 'info:gdb' # , go to "Extending"

    这是一个示例 gdb-python 脚本。它将 gdb 附加到发现运行的第一个“your_program”。
    #!/usr/bin/python

    import subprocess
    import string

    def backquotes(cmdwords):
    output = subprocess.Popen(cmdwords, stdout=subprocess.PIPE).communicate()[0]
    return output.strip()

    pid = backquotes(['pgrep', 'your_program'])

    gdb.execute("attach " + str(pid))

    关于unit-testing - 如何编写 gdb 脚本(使用 python)?示例添加断点,运行,我们碰到了什么断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060565/

    40 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com