Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Opening source code from debug view edits .class after Android R18 update

When I'm debugging my code in Eclipse, I get annoyed when I open up the editor to find out I cant edit it because I'm actually viewing the source of the .class file. How do I get Eclipse to open up the .java file instead of the .class file when in debug mode?

EDIT: When I hit a breakpoint in my code, it brings me to MyFile.class, instead of MyFile.java, so I can see my code but not edit it.

EDIT: I'm guessing it has somethign to do with Android and ADT R18

like image 754
tyler Avatar asked Jul 11 '12 21:07

tyler


4 Answers

After I finally found some time and good reason to look into this issue a bit deeper I'll elaborate a bit on Thornbjorn's answer.

As of lately, Google changed the way your Android projects package your external Android libraries. In ADT R17 (I think) it started packaging the external projects source into .jar files and including them directly into your project in the Android Dependencies or /libs folder.

Now, when the debugger hits a breakpoint, it brings up your source code in the .jar, essentially telling you to edit a .class file. The problem is that this file is read-only and so you have to go find your .java source manually. (Pain)

The fix is to right click the Project name in the debug view, and select "Edit Source Lookup..." from the menu. From there, remove the Default lookup path. After that, manually add the associated projects (not jars) that your project references. This is done by clicking Add, selecting Java Project, then checking the appropriate projects.

like image 105
tyler Avatar answered Nov 19 '22 03:11

tyler


OK, so I hate to be "that guy", given the number of people for whom this worked, but this didn't work at all for me. I mean that the "Edit Source Lookup..." menu item was not in the context menu. I did not miss the instruction to do this in the Debug Perspective (presumably in the Project Explorer in the Debug Perspective). I tried it while the app was running and while the app was suspended. I tried checking the menu for the application's project (presumably what the instructions refer to) and for the library's project. No dice. This is with the latest Eclipse build.

However, I was able to resolve the issue:

  1. Set a breakpoint in either your application or the library you are trying to link source for. You can actually put this anywhere as long as the library you are trying to link source for has a function that will appear on the call stack when the breakpoint is hit.
  2. Start debugging your application.
  3. Navigate your app to hit the breakpoint.
  4. Make sure you are in the Debug perspective.
  5. In the Debug tab (where the call-stack appears), find any function from your library.
  6. Right-click that function. The "Edit Source Lookup..." menu option should be there (close to the bottom).
  7. From here, the instructions are the same as Styler's. Click "Add", select "Java Project" and add your project (or multiple projects).
  8. Before you exit the "Edit Source Lookup..." window, if you are like me, you will see that Eclipse has chosen to add a bunch of stuff to the list that you didn't choose. Some of that stuff (probably under expandable items with names like "Android Private Libraries" may be the jars for the libraries you just added source for. Remove those jars from the list.
  9. Profit!
like image 7
Dave Avatar answered Nov 19 '22 02:11

Dave


  1. Open main project properties -> Java Build Path -> Projects tab and add there projects the main project depend on.
  2. Switch to Order and Export tab and uncheck Android Dependencies
  3. Enjoy
like image 6
Sergei Krivonos Avatar answered Nov 19 '22 04:11

Sergei Krivonos


For some reason Eclipse does not believe that the class file comes from your Java file. This is frequently a malconfigured buildpath, or a jar-file used instead of the project generating the jar file.

Look in the project manager panel (<->button) to see where Eclipse finds the class file and then figure out why it uses that location instead of your project with the source file.

like image 2
Thorbjørn Ravn Andersen Avatar answered Nov 19 '22 03:11

Thorbjørn Ravn Andersen