这是我的情景:
我能够使用终端进行调试,使用以下命令:
- 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 进行调试,而不是使用终端。我已经接近了,但卡在这里了。非常感谢您的帮助!
谢谢
sysroot
,我建议从/
开始。更多信息请参见:https://sourceware.org/gdb/onlinedocs/gdb/Files.html#index-set-sysroot-1207 - Eldar Abusalimov