使用lldb / gdb在MacOS上调试envoy

问题描述 投票:0回答:1

我想在MacOS上调试envoy,所以我采取以下行动:

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

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

更重要的是,我可以使用Xcode调试特使吗?

xcode macos lldb envoyproxy
1个回答
1
投票

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

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

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

按顺序采取这些:

1)查找调试信息:

看起来你的构建线正在指示bazel生成一个dSYM,它应该允许你调试二进制文件。

命令:

(lldb)图像列表

如果lldb找到它,将列出二进制和dSYM。检查一下,看看lldb是否找到了你的dSYM。

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

(lldb)add-dsym

让lldb手工阅读如果这样可行,但您仍然看不到源信息,那么dSYM必须已经错误地构建,并且没有它应该拥有的所有信息。你可能需要咨询一些挡板专家来解决这个问题......

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

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

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

如果lldb看到调试信息而不是源,那么你需要使用source-map设置告诉lldb它们在哪里。例如,在这个答案中描述了这一点:

Attaching sources to a binary dylib in Xcode

© www.soinside.com 2019 - 2024. All rights reserved.