的Xamarin debugging documentation表示:使用LLDB調試機庫與Xamarin
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中也不起作用附加。我嘗試了attach
的不同變化,但都沒有工作。
有人能指出我正確的方向如何使用LLDB調試Xamarin應用程序嗎?此外,這是我可以在設備上做什麼,而不僅僅是在模擬器中?我沒有找到關於如何使用LLDB附加到設備上的進程的任何信息。
更新
它看起來像每當我使用lldb
連接到我的二進制debugserver
進程崩潰。下面是崩潰報告的鏈接debugserver
: https://www.dropbox.com/s/9lizhl2quj9n0cc/debugserver_2015-07-07-131423_gauss.crash?dl=0
更新2
當我運行的應用程序dtruss
它打印系統調用,直到它遇到
dtrace: error on enabled probe ID 2475 (ID 194: syscall::ptrace:return): invalid user access in action #5 at DIF offset 0
這當某些事情發生時會發生ptrace(PT_DENY_ATTACH, 0, 0, 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是邪惡的?
附加LLDB到PID應該工作,我做這一切的時候。你確定你使用正確的PID嗎?你從哪裏得到它的? –
來自Xcode。調試 - >附加到進程 - >可能目標列出我的應用程序和它的PID。 ps auxwww | grep App給了我相同的pid。該應用程序是否需要處於特定狀態? –
我幾乎100%肯定你正在嘗試調試錯誤的pid。你可以顯示完整的'ps auxwww | grep應用程序'輸出其pid你試圖附加? –