c++ - 在远程机器上编译的调试过程

标签 c++ c macos debugging lldb

我在 Debug模式下编译了 Xcode 项目。但是,在使用 lldb(或任何其他远程计算机)从 VM 运行它时,我看不到任何调试符号。

为了解决这个问题,我在本地编译机器上创建了一个指向项目源代码的软链接(soft link),这样每个文件都有相同的路径。

然而,与本地 VM 不同,在远程机器上我可能没有源代码访问权限。

所以我的问题是我应该从编译机中的项目调试输出复制哪些文件到远程机器,以便 lldb 调试器将识别目标符号,以及我应该如何“告诉”lldb 查看这些新数据,而不是原始符号位置(在编译机中)

最佳答案

在正常的构建/调试周期中,lldb 从构建过程中创建的 .o 文件中读取调试信息。二进制产品中有一个“调试图”指向这些 .o 文件的位置。由于调试映射记录绝对路径,如果您想在另一台机器上使用 .o 文件,.o 文件必须出现在文件系统上的相同位置,因为它们在构建器上。

另一种方法是使用 Xcode 的“DWARF + dSYM”调试信息生成变体,它会构建一个“.dSYM”文件夹,其中包含完全链接的调试信息。然后只需将 dSYM 和二进制文件移动到同一目录,lldb 就会找到它。如果由于某种原因不起作用,还有一个 lldb 命令:add-dsym,您可以使用它手动告诉 lldb dSYM 在哪里。

关于c++ - 在远程机器上编译的调试过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32228597/

相关文章:

c++ - 如何在派生类构造函数中初始化基类成员变量?

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c - 我们如何使用程序的输出进行进一步的计算? C (Linux)

c++ - Delaunay 三角剖分 : too many triangles

c++ - 使用 accumulate 计算替代总和

c - 在 Eclipse 中将 fgets(char* c, int i, file* f) 与 printf() 结合使用 - CDT。输出顺序不正确。!

c - Visual C 2012 : I am getting weird errors. 提供代码段和错误

Xcode 因 SourceCache 中的断言失败而崩溃

c++ - "Searching Taps"对 HomeBrew 意味着什么?

c - 'SHA1' 已弃用 : first deprecated in OS X 10. 7?