xcode - 在 MacOS 上使用 lldb/gdb 调试特使
问题描述
我想在 MacOS 上调试 envoy,所以我采取了以下措施:
- 我使用命令 bazel build -c dbg --apple_generate_dsym //source/exe:envoy-static 构建特使二进制文件
- lldb -p {pidOfEnvoy},设置断点断点设置 --name onConnectionEvent
但是当断点被击中时,源代码不显示。带有 bazel 构建的 MacOS 是否支持此功能?如果支持,我应该添加什么选项来构建短语?
还有,我可以用 Xcode 调试 envoy 吗?
解决方案
有两种可能的方式会失败。
(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 它们在哪里。例如,在此答案中对此进行了描述:
推荐阅读
- machine-learning - 如何在 keras 中使用 categorical_hinge 损失以便在最后一层使用 SVM 进行训练?
- php - ajax - 执行 php 脚本和数据验证时出错 - 如何解决?
- reporting-services - 参数过滤器 SSRS 表达式数据集
- java - SpringBoot:required=false时的requestParam值验证
- javascript - Javascript .getTime() 到另一个时区
- git - 使用 pip 安装 Git 存储库
- ios - NSURLComponents 中的 Swift 4 转义 & 符号
- r - 转置一长串数字
- google-sheets - 是否有谷歌表格公式或查询来获取日期范围内的月份数组?
- python - 逆变换预测结果