使用操作数堆栈和局部变量可视化进行 Java 字节代码调试?

标签 java jvm bytecode

我正在寻找一个用于调试和单步调试 Java 字节码的工具, 基本 JVM 状态的可视化,包括操作数堆栈和局部变量数组,仅用于教育目的和 JVM 学习(对于我自己,也希望对其他人来说)。手头有这样的工具吗?

我遇到了 Dr. Garbage 的 Bytecode Visualizer Eclipse 插件,它允许中断和单步执行 Bytecode,但它不能可视化 JVM 状态:

http://www.drgarbage.com/bytecode-visualizer

以下相关问题(相当古老)提到了一些工具,其中一些允许单步执行字节码,但没有一个具有 JVM 状态可视化:

手头有这样一个工具,能够调试简单的Java程序吗?或者甚至是一个简单的 JVM 模拟器?

谢谢!

最佳答案

我已经改编了 PyJVM去做你想做的事。它为 Java 程序的每个线程显示了一个简单的 GUI(必须针对 Java7 进行编译)。

这个工具的唯一问题是它没有 GC,因为垃圾收集是由 Python 本身处理的。因此,线程 1(守护进程)(引用处理程序)将永远不会执行任何操作。 Finalize方法也不会触发。

来源可在 https://github.com/MatevzFa/pyjvm 上找到(警告:源代码不太好看),您也可以使用 pip 安装它(实际上是 pip2,因为 PyJVM是用Python2编写的)。

安装:

pip install pyjvmgui

升级:

pip install pyjvmgui --upgrade --no-deps

我仍然必须为其编写一个好的自述文件。

关于使用操作数堆栈和局部变量可视化进行 Java 字节代码调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44308719/

相关文章:

java - 为什么在 Java 字节码中跳转而不是返回?

java - 使用 AngularJS 访问 DOM 对象

java - 使用 JNA 的 C 回调使 JRE 崩溃

java - 使用 MethodDelegation 实现环绕通知

java - ASM 5 : when initializing a ClassWriter, COMPUTE_MAXS 和 COMPUTE_FRAMES 有什么区别?

java - 告诉 JVM 使用了多少 native 内存

Python 2 和 3,字节码(pyo 和 pyc)是否向后兼容?

java - 从日志文件中提取 Java 错误堆栈

java - 使用Objectify在GAE上并发写入数据

java - 扑克游戏手牌评估器数组条件结构