ios – 使用lldb使用Xamarin调试本机库

前端之家收集整理的这篇文章主要介绍了ios – 使用lldb使用Xamarin调试本机库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Xamarin debugging documentation表示:

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是邪恶的?

解决方法

Mac OS X上的编码应用程序只能在其应用程序plist中设置特定属性时进行调试.你想要的东西看起来像:
<key>SecTaskAccess</key>
<array>
    <string>allowed</string>
    <string>debug</string>
</array>

你可以看看这个任务的手册页,对这个过程进行一些简洁的描述.

通常对于Xcode项目,这个属性被Xcode插入到你的调试版本中,所以你不需要做任何事情来实现这一点.

我不知道Xamarin是如何工作的,但是它不可能设置此属性.在较旧的OS X系统上,root可以调试任何东西,所以您可以尝试sudo -s,然后从那里调试.但是从优胜美地开始,不被调试的请求得到更广泛的尊重…

猜你在找的iOS相关文章