gpt4 book ai didi

java - 通过搜索堆转储以编程方式查找正在运行的 Java 应用程序的值等的 VisualVM 等软件的替代方案?

转载 作者:行者123 更新时间:2023-12-04 20:51:04 24 4
gpt4 key购买 nike

我没有使用 Java 应用程序的经验,但我发现通常(几乎)不可能找到指向这些应用程序内存地址的静态指针等,这显然是因为处理代码的 Java 引擎(如果这样请纠正我请注意命名错误)。

现在,我使用了 VisualVM ( https://visualvm.dev.java.net/ ),它很棒。我可以选择我的 Java 进程并创建一个堆转储。然后它会向我显示所有类及其值。

我能否使用此方法连续轮询堆转储并接收对象值,例如游戏的 X Y 和 Z?我将如何以编程方式与此类应用程序交互,如果不应使用 VisualVM 完成此操作,还有什么替代方案?

编辑:这是我需要做的:我需要能够找到所有具有特定值属性的类。例如:我会搜索 X 坐标(一个 float ),它应该返回类“PlayerCoordsHandler”(只是一个例子)和相应的 float 及其值......或者只是一种再次找到相同 float 的方法(例如重启后)。此过程不必以编程方式进行,只要可以以编程方式检索当前已知属性 (x float) 的请求值即可(例如使用命令行实用程序或从文件中读取)。

编辑2:目标应用程序是一个 windows 可执行文件(但用 java 制作)并启动它自己的 java VM。无法添加用于调试的 java 参数。但这似乎不是必需的,因为 VirtualVM 能够很好地调试进程。谁知道怎么做?

提前致谢。

最佳答案

看起来您想调试正在运行的 Java 应用程序。

“官方”Java 调试器是 JDB。我相信它是 JDK 的一部分。它具有设置断点、检查堆、列出和显示甚至更改变量、显示正在运行的线程等的能力。通常的调试器的东西。但它是命令行,使用起来让人头疼。

相反,使用带有集成调试器的 IDE 更有意义。我使用 Eclipse。您可以执行所有常见的调试操作,包括显示带有变量的窗口。您可以设置条件断点,还有更多。具体来说,在回答您的问题时,您可以设置监视表达式,这些表达式将在程序执行期间进行评估,并在它们发生变化时以新值刷新它们的显示。

您可能不想在 IDE 中运行您的 Java 应用程序;或者它可能正在 Web 应用程序服务器中运行。这对于 JDB 或 Eclipse(或其他 IDE,如 NetBeans 或 IntelliJ Idea)来说不是问题:它们可以连接到正在运行的 JVM 并以同样的便利程度进行远程调试。

像这样远程或以其他方式调试的程序运行速度比未调试时慢一些。您的游戏在调试时将以相当糟糕的 FPS 运行;但它仍应或多或少地正常响应游戏互动。


远程调试:

To be able to attach your EclipseNetBeans debugger to a running Java process you need to start that process with the following Java options…

-Xdebug -Xrunjdwp:transport=dt_socket,address=3704,server=y,suspend=n

关于java - 通过搜索堆转储以编程方式查找正在运行的 Java 应用程序的值等的 VisualVM 等软件的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2019624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com