Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a breakpoint programmatically on Android

In C# I can write:

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

This has no effect when the program is not being debugged. When a debugger is attached, it behaves like a breakpoint that can never be turned off. How can I achieve similar effect on Android?

Or maybe I should not focus on breakpoints at all. What I really want is to have no consequence in regular use (a generic error message will be shown to the user), but have the source of error become obvious the moment a dev will start looking at it. I've tried assert, but it's a sub-project that's compiled to release flavor most of the time and I can't rely on someone remembering to switch it to debug.

like image 217
Agent_L Avatar asked Dec 14 '16 11:12

Agent_L


People also ask

How do you add a breakpoint in Android?

To add a line breakpoint, proceed as follows: Locate the line of code where you want to pause execution, then either click the left gutter along that line of code or place the caret on the line and press Control+F8 (on Mac, Command+F8).

How do you create a breakpoint in Java?

To define a breakpoint in your source code, right-click in the left margin in the Java editor and select Toggle Breakpoint. Alternatively, you can double-click on this position. The Breakpoints view allows you to delete and deactivate Breakpoints and modify their properties.

What command do you use to set a breakpoint?

Breakpoints are set with the break command (abbreviated b ). The debugger convenience variable `$bpnum' records the number of the breakpoint you've set most recently; see section Convenience variables, for a discussion of what you can do with convenience variables.

How do you create a breakpoint in a jar file?

Open project explorer and then expand your project. Then, look for maven dependencies and expand this tree view. Now, you can expand any jar file and see list of available classes and by pressing enter on any of them, Eclipse will decompile the source for you and you can set a breakpoint.


2 Answers

I think that Debug.isDebuggerConnected() is what you are looking for. This will return true only if the app is started with debugger attached and false otherwise, no matter of build type or flavor. Unfortunately, I don't think that you can stop the execution programatically, but with the above instruction you should be able to display an error message or throw an exception. Personally, I'm thinking to something like this:

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    
}
like image 150
Iulian Popescu Avatar answered Oct 21 '22 03:10

Iulian Popescu


I was also hoping that this could be done, but I've not found any reasonable way to programmatically cause the debugger to breakpoint. What I've done to get around this problem is to create a breakpoint class with a method call "br". When I'm debugging, I'll set a breakpoint in the "br" method. After that, whenever my code calls the "br" method, the debugger stops. I then step out of that method and then inspect the state of the program where the "br" method was called. Hope that helps!

like image 41
Tom Rutchik Avatar answered Oct 21 '22 03:10

Tom Rutchik