我想在MacOS上调试envoy,所以我采取以下行动:
但是当破坏点被击中时,源代码不显示。在使用bazel构建的MacOS上是否支持此功能?如果支持,我应该在构建短语中添加什么选项?
更重要的是,我可以使用Xcode调试特使吗?
有两种可能的方法可能会失败。
(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它们在哪里。例如,在这个答案中描述了这一点: