2016-12-14 2 views
3

In C# erstellen kann ich schreiben:Wie ein Breakpoint programmatisch auf Android

if(Debugger.IsAttached) 
    Debugger.Break(); 

Dies hat keine Auswirkung, wenn das Programm nicht gedebuggt wird. Wenn ein Debugger angefügt ist, verhält er sich wie ein Haltepunkt, der niemals deaktiviert werden kann. Wie kann ich einen ähnlichen Effekt auf Android erzielen?

Oder vielleicht sollte ich nicht auf Haltepunkte überhaupt konzentrieren. Was ich wirklich will ist, keine Konsequenzen in der normalen Verwendung zu haben (eine generische Fehlermeldung wird dem Benutzer gezeigt), aber die Fehlerquelle wird offensichtlich, sobald ein Entwickler sie betrachtet. Ich habe Assert ausprobiert, aber es ist ein Teilprojekt, das kompiliert wurde, um die meiste Zeit den Geschmack freizugeben, und ich kann mich nicht darauf verlassen, dass sich jemand daran erinnert, es auf Debugging umzustellen.

+0

Ich habe noch nie gehört, dass die Einstellung von Breakpoints aus dem Debuggee auf Java/Android möglich ist. Normalerweise werden Breakpoints vom Debugger gesetzt, nicht vom Debugee. – Robert

+0

@Robert Das Konzept selbst ist ziemlich alt, wir haben '__asm ​​__ (" int $ 3 ");', 'DebugBreak();' und so weiter. Ich habe es nicht geschafft, Java zu finden, genauso wie du es sagst. –

Antwort

0

Wenn ich klar verstehen Sie - versuchen, diesen Code-Snippet:

if (BuildConfig.DEBUG) { 
     // Your, developers behavior 
    } 
    else { 
     // release behavior 
    } 
+0

Ich denke, er braucht einen Haltepunkt, wo das Programm eher etwas Code stoppen kann, der in Build aufgerufen wird. –

+0

Der Flavor ist release so 'BuildConfig.DEBUG' = false; –

+0

@Michel_T. Im schlimmsten Fall kann ich eine unangenehme Ausnahme machen - das sollte etwas Aufmerksamkeit bekommen. Aber nur, wenn ich 100% sicher sein könnte, dass tatsächlich jemand zuschaut. –

1

Ich denke, dass Debug.isDebuggerConnected() ist das, was Sie suchen. Dies gibt true nur zurück, wenn die App mit Debugger angeschlossen ist und false sonst, egal von build type oder flavor. Leider glaube ich nicht, dass Sie die Ausführung programmatisch stoppen können, aber mit der obigen Anweisung sollten Sie in der Lage sein, eine Fehlermeldung anzuzeigen oder eine Ausnahme auszulösen. Persönlich denke ich an etwas wie das:

if (Debug.isDebuggerConnected()) { 
    // throw an exception for the developer with a detailed message 
} else { 
    // show the general error message to the user with a dialog/toast  
} 
Verwandte Themen