【问题标题】:LLDB - setting source code pathLLDB - 设置源代码路径
【发布时间】:2017-03-20 12:57:57
【问题描述】:

根据 lldb 的官方指南,在调试会话期间查看源代码的能力(使用命令source list)是通过为源文件设置新路径名来完成的。

即如果我在一台计算机上的 /tmp 中编译我的项目并将其部署到另一台源代码位于 /Users/Src/ 的计算机上,我应该在部署机器中运行 lldb 时键入 settings set target.source-map /tmp /Users/Src

但是,如果我从其他人那里获得可执行文件,但不知道构建目录,会发生什么情况。并且可能源代码的组织方式与构建的位置不同(但文件内容相同)。

我的问题是:

  1. lldb 是否知道如何在提供的路径中递归搜索匹配的源文件?

  2. 如何从 mach-o 可执行文件中获取原始路径名?

这是命令的正式描述:

重新映射调试会话的源文件路径名。如果您的源文件不再位于与构建程序时相同的位置 --- 可能程序是在不同的计算机上构建的 --- 您需要告诉调试器如何在其本地文件路径中找到源文件构建系统的文件路径。

【问题讨论】:

  • 我对 lldb 和 osx 都不熟悉,但我建议您尝试使用 readelf -aobjdump -p 从可执行文件中获取一些路径信息。但是readelf似乎在osx中​​不可用,stackoverflow.com/questions/3286675/…
  • 感谢您的评论。但是,ORX 可执行二进制结构与 ELF 不同,称为 MACH-O,但我会尝试找到 objdump 的同义词。

标签: c++ c macos debugging lldb


【解决方案1】:

如果您知道相关代码中的函数名称,请执行以下操作:

(lldb) image lookup -vn <FunctionName> <BinaryImageNameContainingFunction>

并查找 CompileUnit 条目。那里给出的路径是 lldb 从调试信息中得到的路径。

【讨论】:

  • 我拼命尝试在 Mac OSX 上使用它从​​ Qt 框架中查找 C++ 函数的默认路径.... image lookup -vn QStyledItemDelegate::paint /Users/leo/Qt_online/5.15 .0/clang_64/lib/QtGui.framework/QtGui 给出“警告:无法找到匹配'/Users/leo/Qt_online/5.15.0/clang_64/lib/QtGui.framework/Versions/Current/QtGui'的图像”(所以问题可能是如何指定框架)
  • 您可以只提供基本名称(在您的情况下为 QtGui),除非您有一个具有相同基本名称的捆绑和共享库,否则它更简单且您所需要的一切。不确定为什么完整路径不适合您。 image list 命令将列出所有图像,看看你是否可以在那里找到库。也许某处的路径中有一个符号链接,所以你和 lldb 拼写不同?
  • image list 是我一直在寻找的超级命令...原来我的 QtGui 拼写为 /Users/leo/Qt_online/5.15.0/clang_64/lib/QtGui.framework/Versions/5/QtGui (其中没有 QStyledItemDelegate::paint,但 image lookup -vn paint /Users/leo/Qt_online/5.15.0/clang_64/lib/QtGui.framework/Versions/5/QtGui 给了我所有paint 该框架中的函数),非常感谢!
猜你喜欢
  • 2013-07-03
  • 2020-04-12
  • 2016-08-26
  • 2013-02-09
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
相关资源
最近更新 更多