Bytecode Outline plugin for Eclipse
Bytecode Outline plugin shows disassembled bytecode of current
java editor or class file, allows bytecode/ASMifier code compare
for java/class files and shows ASMifier code
for current bytecode. It also allows to disassemble and debug classes without attached source code on any operating system where Eclipse is running.
Here you can see outline examples and debugging examples
This programm is free, see copyright.
Why Bytecode Outline
Have you already asked yourselves what the compiler
does with your Java code?
Here is the answer ;)
The main reason for this plugin was my study how Java generates bytecode
and my interest in ASM
framework. ASM is a great, fast and small bytecode manipulation
framework, licensed under the BSD License.
Bytecode Outline is free, see copyright.
ASM is also free and parts of them are included to Bytecode Outline
plugin distribution. Please visit http://asm.objectweb.org/index.html to
obtain latest information about ASM.
Bytecode Outline currently supports only Eclipse default Java editor.
In order to use Bytecode Outline as default *.class file editor, it should be set as "default" under "Window->Preferences->General->Editors->File Associations->*.class"
Please use Eclipse update
manager to install this plugin.
Eclipse 3.3 - 3.4:
Go to "Help -> Software Updates -> Find
and Install... -> Search for new features to install -> Next -> New
Go to "Help -> Install new Software... -> Work with:"
and use the http://andrei.gmxhome.de/eclipse/ as
1) Window -> Show View -> Other -> Java -> Bytecode
to see bytecode of current Java editor/ Class file view. The automatic build for projects should be enabled in order to see generated class files.
If "Link with editor" is
on, then any selection in Java editor will be followed with selection of
appropriated bytecode label, and vice - versa.
this bi-directional selection could only works, if your bytecode contains
source lines/local variables information. Check your compiler setings,
if you are not sure that your compiler generates debug information.
If "show raw bytecode" is off,
than local variable names will be shown instead of indexes, full qualified
names replaced with simply class names, and primitive type abbreviations
decoded to readable names.
If "show current element only" is on, then only bytecode of current field/method node will be shown (if
cursor is placed inside field/method name or body).
2.1) Select two *.class/*.java files
-> right click
with -> Each Other Bytecode
2.2) Select one *.class/*.java file
-> right click -> Compare
with -> Another Class Bytecode
to compare bytecode of selected class files. Compare works also for *.class
files included in any referenced *.jar library.
"Toggle ASMifier mode on/off" button
on both Bytecode Outline and Compare View shows ASMifier java
code, that generates selected bytecode. More information about how to use
ASMifier you can find here.
Note: if ASMifier mode is "on", then
selection of java code cannot be folowed by selection of appropriated bytecode
instruction, and vice - versa; the "show raw bytecode" action
is also meaningless.
3) Window -> Show View -> Other -> Java -> Bytecode reference
to see reference documentation to selected bytecode instruction in the
bytecode view. This documentation is taken from "Java Virtual Machine"
by Jon Meyer & Troy Downing Copyright (c) 1997 by O'Reilly & Associates,
and provided with permission of O'Reilly
Media, Inc. Packaging, cleanup, reformatting and XSL transformation completed
by Eugene Kuleshov (firstname.lastname@example.org).
4) Help -> Help contents -> JVM Instruction Reference
to see the entire bytecode reference documentation, provided with BCO
You can participate in general ASM mailing list at: forge.objectweb.org/mail/?group_id=23
You can post bugs / feature requests at: forge.objectweb.org/tracker/?group_id=23
Please send comments to
New in 2.4.2 (Eclipse 3.6-4.3 only) [22.12.2013]
Preliminary support for Java 8 (based on latest ASM 5.0 developer snapshot)
See https://bugs.eclipse.org/bugs/show_bug.cgi?id=380190 and https://wiki.eclipse.org/JDT/Eclipse_Java_8_Support_(BETA) for details about Java 8 Eclipse support
New in 2.4.1 (Eclipse 3.6-3.8 only) [12.05.2012]
New in 2.4.0 (Eclipse 3.6-3.7 only) [30.10.2011]
Feature: updated to the major ASM 4.0 release, supporting Java 7 class format.
Plugin now requires Java 5.
New features for BCO view:
added code highlighting (limited to the java code style), also in ASMifier mode
added <Ctrl+Click> navigation to java types
added javadoc hover for java types
added opcode doc hover for opcodes
Fix for BC reference view - in case nothing useful is selected, show the index page for all opcodes
New in 2.3.1 (Eclipse 3.6-3.7 only) [14.08.2010]
New in 2.3.0 (Eclipse 3.5-3.6 only) [30.05.2010]
New in 2.2.12 (Eclipse 3.4-3.5 only) [20.07.2009]
New in 2.2.10 (Eclipse 3.4-3.5 only) [27.06.2009]
New in 2.2.9 (Eclipse 3.4-3.5 only) [03.05.2009]
New in 2.2.8 (Eclipse 3.4 only) [07.01.2009]
New in 2.2.7 (Eclipse 3.4 only) [24.11.2008]
New in 2.2.6 (Eclipse 3.4 only) [17.08.2008]
All the fixes in 2.2.6 (and some in 2.2.5) are the results of bug reports from Dave Latham, thank you Dave!
Fixed broken "linking" on line selection in BCO between bytecode analyzer pane and editor.
Fixed empty bytecode analyzer pane on first view startup.
Fixed stack information in bytecode analyzer pane (stack info was shown randomly at wrong offsets).
Added "ASM instruction offset" column in bytecode analyzer pane.
New in 2.2.5 (Eclipse 3.4 only) [02.07.2008]
Added preference page for BCO (Window->Preferences->Java->Bytecode Outline)
Fixed "disabled view" bug after toggling "link with editor" off in the outline view
Fixed "BadLocationException" bug in decompiled bytecode editor
Updated to the latest ASM version (3.1 from CVS HEAD)
New in 2.2.4 (Eclipse 3.4 only) [18.05.2008]
New in 2.2.3 (Eclipse 3.3 only) [06.10.2007]
Fixed some Eclipse 3.3 related problems in bytecode compare editor and bytecode reference view
Bytecode refrence view is now additionally linked to decompiled class editor
Bytecode refrence view and bytecode compare editor remembers last used setings
New in 2.2.2 (Eclipse 3.3 only) [03.07.2007]
New in 2.2.1 [03.07.2007]
New in 2.2.0 (Eclipse 3.2 only) [03.07.2007]
New in 2.2.0 beta (for testing / feature requests) [08.01.2007]
Changelist since last public BCO 2.1.0, without any meaningful order:
"Options to show non decimal values for numeric constants in the bytecode"
"Add popup menu to bco view to open bytecode reference view"
"Add index page with all opcodes for Bytecode Reference View"
"Support for linking with outline view"
"Synchronize selection between Java editor and bco": first part (Java->BCO) implemented
"Allow to compare two methods in the same class"
Improved inner class support (again)
Added bytecode disassembler (readonly) working as a replacement for default (readonly) class editor for classes from linked libraries. If you know jadclipse, you may got the idea. The difference is that it shows bytecode and not Java code, and it is OS-independent (jadclipse works on Win32 only). This feature requires Eclipse 3.2.
Added (limited) debugging support. You may now debug classes from linked libraries using bytecode disassembler. It is not a full featured debugger and is useful only if you need to debug classes without assotiated source code. This feature requires Eclipse 3.2.
All settings in BCO view are now persistent between Eclipse starts.
Added "togle link with BCO view on/off" button to bytecode reference view.
Included ASM 3.0 final (support for new Java 1.6 bytecode additions)
Bytecode compare got additional formatting options (show/hide: line info, local vars, stack map attributes)
Class files *not* on the Java classpath may be also opened with bytecode disassembler (readonly)
Different smaller bugfixes.
I may also forgot something, it's a long time since 2.1.0 :o)
Please notice, that because of new "bytecode editor/debugger" features (see points 8 & 9) latest BCO sources was compiled against Eclipse 3.2. The BCO view itself may still work with Eclipse 3.1, but it is not more guaranteed/tested. The "bytecode editor/debugger" features are also *not* compatible with latest Eclipse 3.3 milestones.
Please report bugs here:
and feature requests here:
New in version 2.1.0
This version is using a new ASM 3.0 beta library with support for new Java 1.6 bytecode structures (StackMap/Frames).
Added support for Java 1.5 changes in naming strategy of anonymous and inner classes. Fixed some issues with constructors of inner classes.
Line numbers and local variables could be now switched on/off in both BCO view and bytecode compare editor.
Compatibility fixes for Eclipse 3.2.
Bytecode Outline is distributed now again as one plugin, ASM libraries are included inside. The plugin is deployed now also as a single jar file - you do not need to unzip it.
Minor bugfixes / improvements.
New in version 2.0.2
New bytecode reference view shows "javadoc" to the selected
bytecode instruction. Fixed strange "default" java editor bug
on Eclipse 3.1.
New in version 2.0.1
New status line shows bytecode class version, class file size and current
bytecode offset. Fixes for exceptions after refactoring of existing classes.
Fixes for analyser view on abstract methods/interfaces, performance/selection
New in version 2.0.0
Port to ASM 2.0
Support new JDK 1.5 features (annotations, generics)
New option to see the local variables table and stack operands
added copy/select/find actions to bytecode/asm code view
support for AnyEdit "open
type under cursor" / "open file under cursor"
bugfixes and minor enhancements
New in version 1.3.1
Fixed ASMifier view output in "show current element" mode
(bug reported by Steven Harris).
New in version 1.3
Added "Toggle ASMifier mode on/off" functionality
on both Bytecode Outline and Compare View.
New in version 1.2
Added "bytecode compare" for
referenced or generated *.class files. Fixed problems with shared
sourcecode / bytecode output folders.
New in version 1.1
Added support for ASM "attributes" package. Fixed bug with mixed
sourcecode / bytecode im project root. Minor cosmetic changes.
New in version 1.0
This release is the first stable public release. Any bug comments are