首页 > 解决方案 > 在 MacOS 上使用 lldb/gdb 调试特使

问题描述

我想在 MacOS 上调试 envoy,所以我采取了以下措施:

  1. 我使用命令 bazel build -c dbg --apple_generate_dsym //source/exe:envoy-static 构建特使二进制文件
  2. lldb -p {pidOfEnvoy},设置断点断点设置 --name onConnectionEvent

但是当断点被击中时,源代码不显示。带有 bazel 构建的 MacOS 是否支持此功能?如果支持,我应该添加什么选项来构建短语?

还有,我可以用 Xcode 调试 envoy 吗?

标签: xcodemacoslldbenvoyproxy

解决方案


有两种可能的方式会失败。

(1) lldb 根本找不到调试信息。
(2) lldb 可以找到调试信息但找不到实际的源文件。

您可以通过查看应该具有调试信息的代码的回溯来区分这些情况。如果 lldb 在回溯中没有显示行号,那么您属于第一种情况。如果您看到行号但没有来源,则属于后一种情况。

按顺序排列这些:

1)查找调试信息:

看起来您的构建行正在指示 bazel 生成 dSYM,这应该允许您调试二进制文件。

命令:

(lldb) 图像列表

如果 lldb 找到它,将列出二进制文件和 dSYM。检查 lldb 是否找到了您的 dSYM。

如果没有自动找到 dSYM,您可以在文件系统中找到它,然后执行以下操作:

(lldb) 添加-dsym

让 lldb 手动读取它。如果这可行,但您仍然看不到源信息,那么 dSYM 一定是构建不正确,并且没有它应该拥有的所有信息。您可能需要咨询一些边框专家来解决这个问题......

您可以在此处查看有关如何在 macOS 上处理调试符号的更多详细信息:

http://lldb.llvm.org/symbols.html

2)源信息但没有源文件:

如果 lldb 看到调试信息但没有看到源,那么您将需要使用该source-map设置来告诉 lldb 它们在哪里。例如,在此答案中对此进行了描述:

在 Xcode 中将源附加到二进制 dylib


推荐阅读