Die Xamarin debugging documentation zeigt:Verwenden LLDB zu debuggen nativen Bibliotheken mit 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.
Allerdings finde ich keine Dokumentation darüber, wie LLDB verwenden, um eine Xamarin App zu debuggen. Wenn ich meine App im iPhone Simulator laufen und versuchen, es zu befestigen LLDB ich mit dem folgenden Fehler:
(lldb) attach --pid 37993
Process 37993 exited with status = -1 (0xffffffff) lost connection
error: attach failed: lost connection
Anbringen mit Xcode ist entweder nicht funktionieren. Ich habe verschiedene Varianten von attach
ausprobiert, aber keiner von ihnen hat funktioniert.
Kann mir jemand in die richtige Richtung zeigen, wie man Xamarin-Apps mit LLDB debuggt? Kann ich das auch auf dem Gerät und nicht nur im Simulator tun? Ich habe keine Informationen darüber gefunden, wie Sie LLDB verwenden können, um eine Verbindung zu einem Prozess auf einem Gerät herzustellen.
aktualisieren
Es sieht aus wie der debugserver
Prozess abstürzt, wenn ich lldb
verwenden, um meine binär zu verbinden. Hier ist ein Link zu der Absturzbericht für debugserver
: https://www.dropbox.com/s/9lizhl2quj9n0cc/debugserver_2015-07-07-131423_gauss.crash?dl=0
Update 2
Als ich dtruss
auf der App führen Sie es druckt das System Anrufe, bis es trifft
dtrace: error on enabled probe ID 2475 (ID 194: syscall::ptrace:return): invalid user access in action #5 at DIF offset 0
die passiert, wenn etwas ruft ptrace(PT_DENY_ATTACH, 0, 0, 0);
Warum wird PT_DENY_ATTACH
aufgerufen?
Update 3
Ich verfolgte das ptrace
System Aufruf dieser Funktion: mono_assembly_init_with_opt
, die im Leben des Programms sehr früh geschieht. Diese Funktion ruft nur ptrace auf, wenn ich also gerade von dieser Funktion zurückkomme, kann ich mit lldb debuggen.
Grundsätzlich kann ich tun:
(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
und jetzt kann ich glücklich mit LLDB debuggen.
Aber ich sollte das nicht tun müssen. Ist etwas falsch mit meiner Projektkonfiguration (Ich kann einfachere Anwendungen mit lldb debuggen) oder ist Xamarin böse?
Anbringen LLDB sollte die pid arbeiten, ich tue es die ganze Zeit. Sind Sie sicher, dass Sie das richtige Pid verwenden? Wo hast du es her? –
Von Xcode. Debug -> An Prozess anhängen -> Wahrscheinliche Ziele listet meine App und ihre PID auf. ps auxwww | Grep App gibt mir die gleiche Pid. Muss die App in einem bestimmten Zustand sein? –
Ich bin fast 100% sicher, dass Sie versuchen, die falsche PID zu debuggen. Kannst du die volle 'ps auxwww | zeigen? grep App-Ausgabe, deren Pid du anhängen willst? –