everytime I try to step into a class during eclipse debugging sessions I get a whole call stack of a ClassNotFoundException which the JVM throws during class loading. This means the call propagates through the AppClassLoader, ExtClassLoader and URLClassLoader which finally throws the exception. I can now step out this entire tree and just do a step-in again and then it'll work but I don't need to tell you that this is annoying like hell.
Does anyone have an idea what's wrong with my config? Interestingly enough I tried this on two fresh eclipse installations but it still happens. I thought about an exception breakpoint but there is none...
Related
When running my code in debug mode, I keep getting 2 error messages:
Could not delete [path_to]\productiondb.log. May be locked by another process
I don't know what process might be locking it. It comes when I make changes to the code while my Pivotal tc Server is running in debug mode, but it dosent seem to create a lot's of trouble. Sometimes however, I get this warning:
Also due to some changes. I usally just restart the server and move on. This isen't the real problem, the real problem is that I get these messages when I havent doen any changes. Somethimes it accures when I run a certen part of the code, other times i occurs when I open certen codes in sts, however, it doen't seem to stop at the same place twice.
I am suspecting that this has something to do with git. I am using git to change between versions and doing tests. So I am thinking that STS has some of the code in memory from before I changed branche with git, and isen't updating it before I run or open the file with that code. But I am rather new to both sts and git, and can't be certan that it would work that way. If it is, does anyone know how to update sts after I have changed branch? If it is not, does anyone know what might causing it?
If you run an app in debug mode, the Eclipse Debugger tells the application when code gets changed and tries to use the debug API to swap in the new code into the running application. This is especially useful if you debug your code, hit a breakpoint, step through the code, fit the issue, change the code, and press save. At that moment, the Eclipse compiler updates the class file and tells the running JVM to swap in the new code. If that succeeds, the debugger will jump back to the last stack frame and the execution of your app will continue with the beginning of the method that you entered. This allows you to directly continue to debug and step through the updated code without restarting the app.
While this is a great feature of the JVM, it is very limited in terms of what scope of changes to the classes the JVM can deal with while doing this hot-swap. It is usually limited to method implementations. So adding new methods, adding or deleting members of the class, etc, are not supported. As a result, the above screenshot will appear. It means that the JVM wasn't able to hot-swap the changed code and will continue to run with the previously loaded code instead of the changed one.
I'm trying to fix a problem in an Eclipse plugin at https://github.com/davidmichaelkarr/e4macs . The repo is a fork of the original application, which is now abandonware.
I have a couple problems with this, but I'm going to limit the scope of the question, hopefully making it simpler for someone to provide an answer.
The main problem I'm having with the plugin is that some operations (the operation "split-window-vertically" in particular) simply do nothing when I execute them. This didn't used to be the case. In some recent versions of Eclipse, this was working fine. It stopped working about 2019-09.
What I want to do first is add log statements that show it's at least getting to the handler method. I've concluded that I don't know how to add logging to an Eclipse plugin. The existing code for the plugin doesn't do any logging, so I don't have an example to go by. I've searched the net for documentation on how to do this, but all the articles I've found are either incomplete or just don't work.
I know of at least one handler that IS working properly. I added what I thought was the correct logging code to that handler, and it never appeared in the ".metadata/.log" file, so I assume that that was not the correct way to do logging.
I saw a reference to using "Activator.getDefault()", but that posting didn't say what the FQCN is, and all the completion offerings I found didn't have a "getDefault()" method.
Update:
I added something like the following to two classes:
private ILog logger = Platform.getLog(<ContainingClass>.class);
And then in a method in each of these classes, I used logger.info("message");
I ran this in my debug instance and tested the operations in both classes. The log messages appeared.
I then uninstalled the plugin from the main installation, then built the plugin in my RPC instance, then reinstalled the plugin in the main installation, from the local update site defined by the "...Update" project.
I then tested both operations, and I saw nothing in the log.
I may have solved my logging problem at this point, but I'm still having some sort of problem with deployment. I have a feeling that the process I went through to reinstall the changed plugin is not working.
To get an activator with a getDefault() method you must specify that the plugin contributes to the UI when you create it and that you want an Activator to be created. This should create an activator class extending AbstractUIPlugin and with a getDefault() static method.
In any plugin you can always use:
IStatus status = new Status(....);
ILog log = Platform.getLog(getClass());
log.log(status);
to log a status object.
Status has numerous constructors. A simple one just to log a message is:
new Status(IStatus.INFO, "plugin id", "message");
Platform is org.eclipse.core.runtime.Platform
Status is org.eclipse.core.runtime.Status
So, I am developing with eclipse 4.2 and groovy 2.3 / jdk 1.6.0_35.
I just worked on one of my classes when suddenly eclipse showed me a dozen compile errors in different classes out of nowhere. It says e.g. it can't find a class in an import statement, although the class is there. Running the code works fine even though the errors are shown. If I add a comment to one of the classes and save it, some errors go away but may come back as soon as I change another (totally different) class.
It also shows me some errors like these:
error description:
As you see, the error is totally unrelated (Optional is totally independent of any other class, also of course independend of the mentioned classes in the error message). If I add a comment somewhere and save Optional, the error goes away but comes back as soon as I save any other class.
I cleaned the project, deleted the bin-directory and restarted eclipse/computer but it didnt' help. Does anyone already experienced this behaviour? How to fix it?
I got similar problem and error was in file above one with compilation error. So try to comment file before and check if this solve problem.
For some reason, Eclipse is giving me ##$%.
First, some Basic info:
Currently I'm using Eclipse Kepler, on a Mac with OS 10.8.4, 4CPUs and 16GB RAM.
Additionally, I'm using the Spring 3.1.0-Release version.
All I'm doing is running an Integration Test using the SpringJUnit4ClassRunner class, this is a test to see the application context can be loaded:
#RunWith(SpringJUnit4ClassRunner.class)
#ContextConfiguration(locations = { TestConfiguration.TestApplicationContextFile })
public class InitIT {
#Test
public void testInit() {
}
}
What happens when the application context has a problem (for instance, someone forgot to put a #Component annotation on a class and we get a "BeanCreationException"), eclipse simply freezes and refuses to do anything.
I can't even see the stacktrace, so I can't see what the problem is, and Eclipse just uses 100%+ of CPU and hangs, not even letting me press "Stop".
This doesn't happen every time, but when it does it's very consistent.
Also, needless to say, when the application context is loaded successfully, everything runs smoothly, so it's only a matter of when there's a problem.
Something I've discovered that may give a clue is that when I simply load the application context from a Main function instead of using SpringJUnit4ClassRunner, then it's a bit better, but it still takes Eclipse a few minutes to "cool down" and be nice enough to show me the stack trace.
Any ideas? Please let me know if I could send any more info that could help
:)
Thanks!
Ido
I am using Eclipse IDE for Java Developers
Version: Helios Service Release 1
Build id: 20100917-0705
In remote debugging Web app with tomcat 7.0.37, when I make some changes, even a line, the changes can not be made into the runtime, so I need to recompile and re-deploy the war application. Wast a lot of time. The message:
Hot code replace failed - Delete method not implemented
I do not understand the message.
Anyone know the secret on how to auto reflect the code change in debug mode? Thanks.
I've found that for hot code replacement to work the code being modified/replaced must be in the execution stack. So you can hot replace changes made to a method you've stopped in, but you can't hot replace changes to that method once you step out of that method... unless you first stop back in the method on a successive call to the method.
With the standard JVM (Oracle's), you can only modify existing methods. Both adding and deleting methods, and changing structure of class (moving methods, fields) are NOT supported. For that, go to JRebel!
One thing to notice is that changes to seemingly "normal code" inside some method will actually need for the java compiler to add or delete methods - and hence it will fail. This happens e.g. if you in an inner class accesses private fields in the outer class - the java compiler will need to add synthetic accessor-methods to the outer class to let the inner class access those fields - which hence will fail to Hot Code Replace. Also, if you remove some code accessing such fields, the java compiler wants to remove the corresponding synthetic accessor-method, which also will fail.
I think there is no way to reflect the code change in debug mode
Debug mode is to trace program flow and find if any issues or errors at particular piece of code....
it just points to line of code in eclipse, which is running in your tomcat, ie. code in eclipse is not used to run application the code u have installed or put in tomcat runs
hence your changes made in eclipse cant reflect in tomcat code