gpt4 book ai didi

debugging - CLion 中的 GDB 监视器命令

转载 作者:行者123 更新时间:2023-12-04 14:09:43 28 4
gpt4 key购买 nike

我正在尝试使用远程 GDB 调试嵌入式项目。我的系统:

  • 目标:ARM Cortex M0。
  • SEGGER J-Link GDB Server V6.10 命令行版本
  • arm-none-eabi-gdb 7.10.1.20160616-cvs
  • CLion 2016.2.2,版本号 #CL-162.1967.7
  • Ubuntu 16.04

  • 我的 .gdbinit 文件中有以下内容:
    target remote localhost:2331 #(I remove this line when debugging with CLion)
    set verbose on
    file "/path_to_output_file/blinky.elf"
    monitor reset
    break main

    现在困扰我好几天的事情是,如果我直接从终端使用 gdb 进行调试,这可以正常工作,但当我在 CLion 中使用调试器时就不行了。在 CLion 中,我收到错误消息:

    此目标不支持“监视器”命令。

    我的理论是终端接受“监视器重置”命令(至少它没有提示)。另一方面,CLion 会打印错误,但之后似乎没有进行重置就继续前进。结果似乎是当我在 CLion 中开始一个新的调试 session 时,我不会从 main() 的开头开始。

    CLion 是否阻止了监视器命令?如果是这样,那么为什么以及是否有解决方法?

    我感觉我的问题可能与 CPP-7322有关。和 CPP-7256 .

    最佳答案

    CLion 不会阻止来自 .gdbinit 的任何特定命令故意。问题是,在附加到目标之前,这些命令在调试器启动时执行。这意味着 monitor reset命令在没有运行远程 session 的情况下被执行,因此它失败了。

    只是为了澄清:

  • 以下是您手动执行 GDB 时发生的情况:

    # commands from .gdbinit
    target remote localhost:2331
    set verbose on
    file "/path_to_output_file/blinky.elf"
    monitor reset
    break main
  • 这是当您使用相同的 .gdbinit 从 CLion 执行 GDB 时会发生的情况文件:

    # commands from .gdbinit
    target remote localhost:2331
    set verbose on
    file "/path_to_output_file/blinky.elf"
    monitor reset
    break main

    # commands executed by CLion to attach
    target remote localhost:2331 # <- ERROR (A program is being debugged already)
  • 下面是当您从 CLion 执行 GDB 并删除 attach 命令时发生的事情:

    # commands from .gdbinit
    set verbose on
    file "/path_to_output_file/blinky.elf"
    monitor reset # <- ERROR not attached to remote gdbserver => unknown command

    # ... not executed due to the error above
    break main
    # commands executed by CLion to attach
    target remote localhost:2331

  • 您链接的问题完全正确,请随时投票(免责声明:我是 CLion 开发人员之一)。恐怕我暂时无法提出合理的解决方法来建议您。

    更新:

    对于您的用例,实际上有一个适用于 CLion 和终端调试 session 的解决方法。您可以使用 GDB hooks实现这一目标。

    在您的 .gdbinit文件用以下几行替换有问题的命令:

    define target hookpost-remote
    file "/path_to_output_file/blinky.elf"
    monitor reset
    break main
    end

    这样,每次连接远程目标时,GDB 都会执行定义的 Hook 中指定的命令,而不管您从 CLion 还是从终端启动调试器的方式。

    关于debugging - CLion 中的 GDB 监视器命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39810593/

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