【问题标题】:Need to debug mixed "C and C++" code running in docker需要调试在 docker 中运行的混合“C 和 C++”代码
【发布时间】:2019-07-31 19:16:30
【问题描述】:

到目前为止,我能够理解以下关于 docker 的内容:

  1. 您可以使用它来容器化您的应用程序 - 沙盒。

  2. 您可以将其用作构建容器,通过“绑定挂载”您的源代码目录并使用容器内的构建工具来构建它。

我将 docker 用于第二个用例。

问题:

我有一个混合了 C 和 C++ 组件的项目,我想完全在 docker 容器中开发它,因为它需要大量的环境配置并且有旧的库依赖项,我不想污染我的开发环境(主机)机器。

我可以使用“gcc”在 docker 中构建它,但我不知道如何调试它。

我尝试通过网络端口使用 gdbserver 对其进行调试,并将其进程附加到 Eclipse CDT(在主机上),但它不会映射回我的源代码,而是显示汇编代码。

我想让它映射回我的源代码以便于调试。有人可以建议我适当的工作流程或指出正确的方向吗?

【问题讨论】:

  • @Someprogrammerdude 考虑了您的建议 - 希望它提供更好的可见性
  • 假设您在启用调试信息的情况下构建(使用 GCC -g 标志),那么您的 Docker 环境和主机环境中源文件的路径是否相同?
  • 除非容器看到的路径不是主机看到的路径,除非您碰巧将它们安装在完全相同的位置。查看 gdb 更改源路径的选项sourceware.org/gdb/onlinedocs/gdb/Source-Path.html
  • 我还没有测试过它(因此暂时保留它作为评论),但 Visual Code 内置了对容器内开发(包括调试)的支持:code.visualstudio.com/docs/remote/containers

标签: c++ c docker eclipse-cdt


【解决方案1】:

GDB是一个可以调试c和c++的Linux调试器

您需要做的就是使用 -g 选项 gdb ./filename 进行编译

gcc -o test test.c -g

gdb ./test

【讨论】:

  • 想回答为什么这被降级了?这实际上在 docker 中非常有效,因为像 Eclipse 这样的重量级 IDE 不是最佳选择。
  • @Blaze 我投了反对票,因为我认为使用原始gdb 始终是一种选择,但我不会将其命名为“轻松调试”。特别是考虑到您在问题中寻求 IDE 级调试的事实。此外,当您使用gdb 时,Docker 部分的问题是完全不相关的(因为一切都发生在 Docker 容器内)。
猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 2013-08-12
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多