Xamarin.IOS 和 Instruments 分析问题

Posted

技术标签:

【中文标题】Xamarin.IOS 和 Instruments 分析问题【英文标题】:Xamarin.IOS and Instruments profiling trouble 【发布时间】:2013-10-29 11:34:36 【问题描述】:

我尝试使用 Instruments 来检测内存问题。我使用以下指南向我展示了如何设置 Xamarin->Instruments,http://docs.xamarin.com/guides/ios/deployment,_testing,_and_metrics/instruments_walkthrough/

但是,我看到 Instruments 在 Xcode5 中发生了一些变化,这并不重要,但一些按钮名称等已经改变了名称。无论如何,我的问题是,在运行 Instruments 时,在 Instruments 的调用堆栈中选择一个条目时,我没有得到“单码”(在上面指南的第 14 步中提到)。有时我只得到应用程序中调用的汇编器/十六进制(?)引用(可能是因为仪器无法匹配 dsym 文件),而且大多数时候我只在调用堆栈中获取名称:“native_to_managed_trampoline_ _”,它显示了一些 obj-c 混淆代码。

那么,到底如何才能在仪器中分析我的应用程序,查看正确的调用堆栈,当我单击调用堆栈条目时,查看有问题的 c# 代码(就像在指南中一样)??

【问题讨论】:

【参考方案1】:

需要检查的几件事:

设备上的配置文件,而不是模拟器。在设备上,您应该获得托管帧的符号,而在模拟器中则不会(这是因为在模拟器中代码是 jitted 的,并且从内存地址转换为方法名称的信息仅存在于进程的内存中)。

确保应用程序名称 (foo.app) 与可执行文件名称 (foo.exe) 相同,否则符号化可能无法正常工作。您可以在项目的构建/输出选项(“程序集名称”字段)中检查/修改可执行文件名称。

不要重新构建您的应用程序,然后分析早期构建。重建将覆盖 dSYM 目录,并使其与任何以前的构建不兼容。

如果您正在分析发布版本,请确保 C# 编译器发出调试信息(在项目的构建/编译器选项中,将“调试信息”设置为“完整”)。这不会以任何方式影响最终的应用程序,它只会使 dSYM 目录包含更多调试信息(文件名/行号),因此在您的版本中也可以安全地保留此选项。

【讨论】:

感谢您的回复。我已经在设备上进行分析。 *.app 和 *.exe 共享相同的名称。不知道第三步,但我只是检查了一下,对我的情况没有帮助。我目前正在为调试构建。还有什么想法吗? :) 再次感谢! 原谅我的无知,但我该如何检查呢?我看到应用程序崩溃时发送到控制台的消息看起来不错。并且设备日志-> 一些崩溃日志显示了一堆 objc 类型的东西,如下所示:17 MyApp 0x00b65d98 native_to_managed_trampoline_MyApp_LoginDialog_ViewWillAppear (registrar.m:2504) 来自设备日志的崩溃报告应该具有完全符号化的堆栈跟踪,例如:MyApp 0xaabbccdd MyApp:Main (Main.cs:123) 是的,他们似乎没有。我尝试建立一个新项目只是为了看看我是否得到了相同的结果,它与我的主项目中的相同。没有象征意义。我现在有点不知所措,我真的需要在我的应用程序中找到一些漏洞。 你能从新的测试项目中粘贴崩溃报告吗?

以上是关于Xamarin.IOS 和 Instruments 分析问题的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms 是 Xamarin.Android、Xamarin.IoS 和 Xamarin.Win 的简单总和吗?

Xamarin.IOS 和 Signalr 推送通知

Xamarin.iOS 和 RFComm

Xamarin.Form与Xamarin.Android或Xamarin.IOS的区别简述

无法使用 C# 从 Xamarin.iOs 和 Xamarin.Android 连接到 MySql

MTOUCH:错误 MT0034 Xamarin.iOS 和 Catel