CLion中的GDB远程调试无法正常工作

4
这是我的情景:
  • 我能够使用终端进行调试,使用以下命令:

    • gdb myprog
    • break myprog.c:4115
    • run --myarg
    • 断点生效,并且我可以在程序中单步执行
  • 我尝试在 Fedora 系统中使用 CLion 16.2.2 进行远程调试:

    • 在服务器上运行以下命令: gdbserver localhost:8080 myprog --myarg
    • 我得到了这个结果: 进程数据已创建;pid = 80199 正在监听端口 8080
    • 在 Linux 客户端上使用 CLion:
    • 设置 / 部署 / 配置 SFTP(上传和下载正常工作)
    • 从服务器下载所有文件
    • 编辑配置
    • 创建新的 GDB 远程调试:
    • GDB:默认(捆绑)
    • 目标:tcp:193.101.144.128:8080
    • 符号文件:{空白}
    • Sysroot:{空白}
    • 路径映射:服务器路径和本地路径
    • 运行调试器
    • 在服务器终端上,我看到:
    • 来自主机 172.24.10.2 的远程调试(这使我相信我已经接近成功)
    • address_string = T:servername:4311
    • 在 CLion 控制台中,我看到:
    • 调试器已连接到 tcp:193.101.144.128:8080(连接成功!)

尽管 GDB 服务器和客户端之间的连接似乎正常工作,但是调试工具(单步执行、跨过、继续等)仍然处于灰色状态,并且断点永远不会被触发。

从第一个测试中,我知道我使用的断点应该是有效的。

我怀疑我使用的传递程序参数的方式(--myarg)在这一行:gdbserver localhost:8080 myprog --myarg 上可能不正确,但我不知道还有哪里可以传递它。

我期待着能够使用这个很棒的 IDE 进行调试,而不是使用终端。我已经接近了,但卡在这里了。非常感谢您的帮助!

谢谢


在IDE底部我看到了这个消息:IBus 1.5.11之前的版本可能会导致输入问题。 - jose luis gonzalez clua
请注意:您的问题似乎是由于在附加过程中出现了不必要的“命令超时”而引起的,并已被跟踪为 https://youtrack.jetbrains.com/issue/CPP-7906,请随意投票。免责声明:我负责CLion中的调试器,并且我已经收到了您发送到我们支持渠道的日志。 - Eldar Abusalimov
顺便提一下,作为解决方法,您可以尝试在调试配置中指定 sysroot,我建议从 / 开始。更多信息请参见:https://sourceware.org/gdb/onlinedocs/gdb/Files.html#index-set-sysroot-1207 - Eldar Abusalimov
嗨,我已经尝试添加sysroot,首先是/,然后使用程序可执行文件部署的服务器路径,但都没有解决问题。我注意到的唯一区别是使用这些设置时,消息“readchar:Got EOF”会多次显示(前者8次,后者20次)。在CLion控制台中,我仍然收到命令超时的提示。非常感谢所有正在努力帮助的人。谢谢! - jose luis gonzalez clua
2个回答

5
我遇到了同样的问题。在我的情况下,问题的根本原因是目标设备上项目文件夹的绝对路径与我本地机器上的绝对路径不同。 在“运行/调试配置”对话框中添加正确的路径映射后,调试器开始工作了。
例如: 路径映射: 服务器路径:/home/ubuntu/src/yourprojectname/ 本地路径:/home/michael/Documents/src/yourprojectname/

0

如果您的可执行文件不是在同一台机器上构建的,通常会发生这种情况。

断点都变灰是因为您的调试符号中的源路径与您本地机器上源文件的实际位置不匹配,而您是从本地机器上启动远程调试会话的。

您需要将构建环境的项目目录映射到本地机器上的项目目录。

远程调试

这基本上执行了set substitute-path gdb命令。一旦修复了源路径,远程调试会话应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接