Use Xamarin Studio’s native debugging support for debugging C# and
other managed languages code and use LLDB when you need to debug C,
C++ or Objective C codethat you might be linking with your Xamarin.iOS
project.
但是我找不到任何有关如何使用LLDB调试Xamarin应用程序的文档.如果我在iPhone模拟器中运行我的应用程序,并尝试使用LLDB附加到它,我会收到以下错误:
(lldb) attach --pid 37993 Process 37993 exited with status = -1 (0xffffffff) lost connection error: attach Failed: lost connection
使用Xcode附加也不会.我尝试了附件的不同变体,但没有一个工作.
有人可以指出我正确的方向,如何使用LLDB调试Xamarin应用程序?此外,我可以在设备上做什么,而不仅仅是在模拟器中?我没有找到有关如何使用LLDB附加到设备上的进程的任何信息.
更新
当我使用lldb连接到我的二进制文件时,看起来调试服务器进程崩溃.以下是调试服务器崩溃报告的链接:
https://www.dropbox.com/s/9lizhl2quj9n0cc/debugserver_2015-07-07-131423_gauss.crash?dl=0
更新2
当我在应用程序上运行dtruss时,会打印系统调用,直到遇到
dtrace:启用的探测器ID 2475上的错误(ID 194:syscall :: ptrace:return):DIF偏移量0处于操作#5的无效用户访问
当某个东西调用ptrace(PT_DENY_ATTACH,0);为什么要PT_DENY_ATTACH?
更新3
我跟踪了这个函数的ptrace系统调用:mono_assembly_init_with_opt,这在程序的生命中很早就发生了.所有这些功能都是调用ptrace,所以如果我刚刚从该函数返回,我可以使用lldb进行调试.
基本上我可以做:
(lldb) process attach --name AppName --waitfor # when the process starts (lldb) b mono_assembly_init_with_opt (lldb) c # when the thread breaks (lldb) thread return 0 (lldb) c
现在我可以用lldb快乐地调试.
但是,我不应该这样做.我的项目配置有什么问题(我可以用lldb调试更简单的应用程序)还是Xamarin是邪恶的?
解决方法
<key>SecTaskAccess</key> <array> <string>allowed</string> <string>debug</string> </array>
你可以看看这个任务的手册页,对这个过程进行一些简洁的描述.
通常对于Xcode项目,这个属性被Xcode插入到你的调试版本中,所以你不需要做任何事情来实现这一点.
我不知道Xamarin是如何工作的,但是它不可能设置此属性.在较旧的OS X系统上,root可以调试任何东西,所以您可以尝试sudo -s,然后从那里调试.但是从优胜美地开始,不被调试的请求得到更广泛的尊重…