【问题标题】:Are debugging symbols any good when compiling with LLVM?使用 LLVM 编译时调试符号是否有用?
【发布时间】:2011-08-26 21:35:22
【问题描述】:

我正在尝试连接一个实时崩溃报告服务,如 airbrakebugsenseTestFlight's SDK,但我想知道在编译您的使用 LLVM 编译器的 MonoTouch 项目。

当您配置 iPhone 构建时,如果您转到项目设置 > iPhone 构建 > 高级选项卡,它会显示“实验性,与调试模式不兼容”。这就是我质疑崩溃报告中的堆栈跟踪的原因。

【问题讨论】:

    标签: xamarin.ios llvm crash-reports debug-symbols


    【解决方案1】:

    这里有几点需要考虑:

    a) 在您的构建中启用调试

    • 告诉编译器发出调试符号(例如 .mdb 文件),其中包含大量信息(变量名称、范围、行号...);
    • 向您的应用程序添加额外的调试代码(例如,将应用程序连接到设备上的调试器、Mac 上);
    • 告诉编译器(例如 AOT)禁用一些优化(这会使调试更加困难);

    这会导致应用程序更大、速度更慢,其中包含大量您不希望人们访问的数据(例如,如果您担心逆向工程)。对于发布来说,没有对每个人来说都是双赢的局面。

    b) 使用 LLVM 编译器不适用于 debug 模式。这通常不是问题,因为在调试时,您可能希望构建过程尽可能快(并且 LLVM 构建速度较慢)。一个有问题的情况是如果您的错误仅出现在 LLVM 构建上。

    c) 托管堆栈跟踪的可用性不需要 debug 符号。它们是根据您的 .dll 和 .exe 文件中可用的元数据构建的。但是,当调试符号可用时,堆栈跟踪将包括每个堆栈帧的行号和文件名。

    d) 我从来没有使用过你提到的工具,但我相信它们很有用:-) 你可能想问一些关于它们的具体问题(wrt MonoTouch)。否则,我认为值得测试一下细节级别是否不同(以及额外的细节是否对您有帮助)。 IMO 我怀疑它会给您带来的不仅仅是运送“调试”版本的实际“成本”。

    • 首先在您的应用程序中创建“崩溃”功能;
    • 然后比较来自非 LLVM“发布”和“调试”构建的报告结果;
    • 接下来比较非 LLVM“发布”和 LLVM“发布”构建;

    很高兴发布您对上述内容的体验:在这里,monotouch 邮件列表和/或博客条目 :-)

    【讨论】:

    • 是的,我希望有人能告诉我,这样我就不必自己测试了。我猜我运气不好。
    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多