Java set breakpoints programmatically - java

Is there any way to programmatically set breakpoints in Java?
Assume you have the filename with the source code line:
Test.java:123
How this can be done?

The Eclipse IDE does not allow you to set a breakpoint from your java code.
However, it does allow you to set conditional breakpoints. With a conditional breakpoint, you can tell Eclipse to only break on a line after some Java expression evaluates to true. You can only tell it to break after some number of iterations. These modes should suffice for almost every usecase.
To enable a conditional breakpoint, right-click on a breakpoint and go to "Breakpoint properties".

Back in the days of VisualAge Jave, I did this with
DebugSupport.halt()
This is something that would have to be supported by the IDE, and would break if the IDE dependencies were not present. As fas I know there are no IDEs today that support this.

I had the same problem but with 10000 files of java which i wanted to search for some string and put breakpoints based on that search.
You can generate xml file containing all breakpoints you need.
How to get that xml file structure?? simply go to debug mode --> right click ->Export breakpoints->then save the file anywhere.open that file and see how it is constructed.
what i did that i searched all the files line by line and generated that xml file and imported it to eclipse.
-You may wonder that how you can loop through 10000 file line by line as it will take a lot of time,you are right but what i did to overcome this is by inserting all lines into indexed field on mysql db.
-I know your case is not that complex but i hope it gives you an idea.you may come with something even better.

Most debuggers will let you break on an exception, so just create your own BreakpointException class, throw and immediately catch it. Have the debugger pause only on BreakpointException.

Related

Java code quality bulk fix - Strings literals should be placed on the left side when checking for equality

We have a huge legacy code base, for which we are trying to fix all Sonar quality issues.
There is issue which says - Strings literals should be placed on the left side when checking for equality. And count of this issue is 12k+.
testFlag.equalsIgnoreCase("Y") - non-complaint
"Y".equalsIgnoreCase(testFlag) - complaint
I am trying to use Intelliji IDE Inspection utility to fix this using "Strutural Search Inspection". How ever, it did not work out.
I have kept search template as
$instanceVariable$(equalsIgnoreCase)\(\"$StringLiteral$
and replace template as
$StringLiteral$(equalsIgnoreCase)\(\"$instanceVariable$
But it does not work, is it right way to do/ any better options available in intelliji for this.
I am open to other IDEs like Eclipse. So if there is an option in any open source IDEs, i could try out.
In Intellij you should be able to do this via the Analyze options.
Probably the easiest option being by Run Inspection by Name to limit the inspection to just the one
Then the inspection you want is expression.equals("literal"), put this in the box that appears and select it, then choose your scope to run the inspection.
You can then fix each occurrence case by case or hit the flip equals button to do them all at once.
I used $Instance$.$MethodCall$("$Parameter$") as my search template and "$Parameter$".$MethodCall$($Instance$) as my replacement template. Under Edit Variables, you can choose MethodCall on the left and under Text Constraints, enter equalsIgnoreCase in the Text/regexp box.
Verified working in IDEA Community 2017.1.5.

How do I invoke the debugger from code?

From Javascript, I can simply write
debugger;
and when that line executes, it stops the code as if I had put a breakpoint there.
Is there an equivalent in Java? I need it to work in Eclipse specifically.
EDIT: can we take it as read that I am not an idiot and if placing a breakpoint with the IDE itself were an option, I would have already done so?
FURTHER EDIT: I had not thought it necessary to point out that since placing a breakpoint with IDE is not an option, any answer that revolves around placing a breakpoint with IDE is not likely to be helpful. In case everybody is dying of curiosity, the original code is not written in Java -- it's processed down to Java byte-code. As a result, Eclipse is confused enough it doesn't want to set breakpoints.
The JVM debugger, which Eclipse uses (mostly) under the covers, can set breakpoint at a line number in a method IF compiled with certain optional debugging info OR at method entry (always).
If your classes were compiled without debugging "lines" so the debugger can't set a line breakpoint, and you don't want to or can't recompile them, you can still set a method-entry breakpoint. In Package Explorer -- NOT an edit window for the source -- right-click the method name/signature and Toggle Method Breakpoint to on.
This can be combined with the comment by #ajp: add a method e.g. void [static] debugger(){} that doesn't do anything when you call it, but provides a convenient target where you can set a method breakpoint.
Warning: although it is possible to compile with partial debugging info, like debugging "vars" but not debugging "lines", generally people just use "debug on" or "debug off". If your classes are compiled without debugging "vars", the debugger will be much less useful.
I am probably going to get a few downvotes, but so be it...
If you open a source file in Eclipse and right-click on the left edge of the document view, you will get the popup menu illustrated in the image below.
As you can see, you have the option to toggle a breakpoint and also to turn off and on the line numbers. So, I am not sure what you mean by "My Eclipse is being operated in an environment where it cannot find line numbers to the source code". Unless you have some modified version of Eclipse that does not show this menu, I don't know what you mean by that. The option is there.
You wrote:
From Javascript, I can simply write
debugger;
and when that line executes, it stops the code as if I had put a breakpoint there.
And also:
can we take it as read that I am not an idiot and if placing a
breakpoint with the IDE itself were an option, I would have already
done so?
Option 1: The simple, "incorrect" answer is that there is no instruction in the Java language to make the program pause in a breakpoint nor there is an option like in languages like C++ to
make a debug build. So, your "ONLY" option is to execute a breakpoint from the IDE.
Option 2: The complicated, correct answer is that you can do what you want following these instructions: https://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html
In your case, I don't believe that you don't have the option to place a breakpoint with the IDE to debug your program; no matter how complex your program is. BUT, I am not here to debate that point. According to your post, you have to do option 2 laid out here.

Debugging using Java source code

Is there a way to include whole Java source code into an eclipse project so the program is easier to debbug (e.g. by inserting println in methods you otherwise couldn't insert anything)?
I have a bug in my code. But to better understand why the bug in my code appears, I'd like to see what intermediate results in some system method (on which use the bug occurs) are.
For example, I'd like to know what JViewPort.scrollRectToVisible() exactly does and how my input behaves in it by printing out some intermediate results that occur in the method itself.
EDIT:
Instead of using JRE System Library X, I want to add the source code from JDK as if I had written the code myself. I want to be able to edit any System class just as I am able to edit any class I created myself. I want editable .java files, not packed .jars...
You would need to add the 3rd-party library to your Eclipse workspace as an project. (How you would do that depends on the code you are dealing with.) Once you have done that, you can hack your copy of the library to add trace prints etcetera.
A better alternative is to simply attach the source code for the 3rd-party library so that the debugger can show you source as you step through the code, set breakpoints,. Then use "advanced breakpoint" techniques instead of trace prints; e.g. http://www.vogella.com/articles/EclipseDebugging/article.html#advanced
You cannot change the library code, but you can view it by using de-compiler. The max you can do is this. Now if you change any code in the libraries which you reached via the de-compiler, you would find an error stating "the integrity of the .jar package has changed which is not allowed"
Eclipse have built-in support for what you wanna do.
All you have to do is set breakpoint and execute application in debugging mode.
You can use these icons in Eclipse debugging perspective.
Follow along Eclipse Debugging Tutorial for details.

Eclipse: syntax highlighting disappeared for one of my files

I was trying to close unused files in Eclipse and accidentally made something wrong. Now I can't see syntax highlighting for one of my files.
Here are two screenshots - on the first you can see file, where highlighting is broken, and on the second everything is fine:
Highlighting doesn't work for this file only. Extension of this file is correct. I tried to look through all menu buttons carefully, but this attempt failed, I suppose Eclipse is hard enough for newbie. Of course, I tried to find information in the Web, but couldn't get anything relative.
I guess you accidentally opened the file with the 'Text Editor'. Refer screenshot below.
In C/C++ is also a scalability mode which disable syntax highlighting if the file has more than 5000 lines.

AutoIndent in Eclipse possible?

I have been wracking my brain trying to figure this out. For the first time I used jEdit the other day and I was pleasantly surprised that it auto indented my code (meaning that I'd put in the following code:
int method () {
_ //<-- and it put me here automatically
I've tried to get the same thing working with eclipse but with no success. I got into the code formatter but I don't see how to make that happen.
Is it possible to do this? Also while I'm here, is there a such thing as a eclipse plugin that will allow you to search the methods and classes of the standard java library?
Thanks
Personally all I use for this is the format options Window->preferences under Java->Code Style ->Formatter.
I once took the time to tweek how I like my code to look like when I work and exported the whole thing. After that I just code without too much bother on what it looks like. When I find the code looks messy by pressing the combination ctrl+shift+f and the whole class becomes pretty again, comments and all.
After a while it pretty much became a reflex...
code code code
ctrl-s, ctrl-b (cause I disable auto build sometimes), ctrl-shift-f
code some more etc...
Once I got used to this I never really cared how it presented the code as i was typing because I knew it would look all pretty as soon as the loop/if/switch/method etc is finished
My clean eclipse install does this by default.
Have you changed any options? Make sure the file you are editing has the .java file extension. The preference options that control the typing automations are under Java -> Editor -> Typing in the Window -> Preferences menu.
Also, I find that the auto-indenting, and most of the other auto-complete functions of eclipse do not function well if the file I am editing has errors in it which prevent compilation. Make sure that your curly-braces are matched correctly, this is the main one that I've noticed blocks auto-indent.
Regarding searching through the standard Java libraries, use the Search -> Java.. menu option, and check the JRE libraries checkbox, then search away. You can also use the Hierarchy view to see how the classes relate. Also, in the Package and Project views you can expand the JRE System Library, and then expand rt.jar which holds pretty much all the standard Java pacakges.
Eclipse has always done this for me by default.
One really cool thing about eclipse is that you can search preference pages. Just right click and go to prefrences. Go to the "Window" menu, and click "Prefrences". Then at the top of the tree view there's a text box that says "type filter text". Replace that with "indent" and it should bring up the page where the indent option is.
Make sure that eclipse recognizes your file as a java file, that you're using the Java distribution, the latest version, etc.
Iv been trying to work around the eclipse indenting and other supposed features for years, and it seems that the bottom line is this ...
It only works for the programming style of the authors, so to use it you need to modify your style to comply.
This would be OK except that the authors of eclipse have some very strange ideas about common shortcut keys.
One horrid example is the search features, eg when did Ctrl+K become "Find Next occurrence" and why doesnt F3 or n work?
That all being said I use eclipse because if you have the time to wait around while it starts up - or never close it - and you can modify everything youve learned about using an editor - why why why - then it will certainly increase your efficiency.
Please note that there is a preference setting for indenting, it can be set for a project, a workspace, or globally, but no matter how you set it eclipse will still chuck tab characters in where you dont want them.
In fact its indent crazy, like it wants to indent everything, even if its already indented.
Like I said Iv been using it for years and it STILL drives me nuts with its random behavior.
Follow these steps for Eclipse:
Select all text: ctrl+A
Correct indentation: ctrl+I
You should check:
Hidden features/tricks for Eclipse?
What is your favorite hot-key in Eclipse?

Categories