问题标签 [jvmti]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何在 JVMTI 中获取完整的命令行?
是否可以使用用于启动当前 Java 进程并在 JVMTI 的 OnLoad 阶段获取所有参数的完整命令行?
java - 如何运行 Jcalltracer
嘿伙计们,我无法打开 jcalltracer,这是 sourceforge 上的一个开源程序,可将 Java 程序反向工程为序列图。当我尝试将以下内容添加到 JVM 时出现错误 -
java -agentpath:C:\calltracer\jvmti\calltracer5.dll=traceFile-C:\calltracer\call.trace,filterFile-C:\calltracer\filters.txt,outputType-xml,usage-uncontrolled -Djava.library.path =C:\calltracer\jvmti -Dcalltracerlib=calltracer5
错误 -
VM 初始化期间发生错误在绝对路径中找不到代理库 C:\calltracer\jvmti\calltracer5.dll,出现错误:无法在 AMD 64 位平台上加载 IA 32 位 .dll
我正在使用 Windows 7 x64,并且我非常确定在检查了我下载的 java sdk 并进行了 java -version 检查后我安装了 x64 版本。有什么线索吗?
java - 使用 g++ 编译 jvmti 代理无法正常工作,但 cc 工作正常
我有一个非常简单的代理,基本上只是所需的 Agent_OnLoad 方法签名。
如果我用 g++ 编译它。
并创建一个共享库并在代理上运行测试
我收到一个错误
如果我使用以下命令进行编译,即编译为 C,则可以正常工作。
然后创建一个 shred lib 并对其进行测试
它工作正常。
问题是我拥有的代码,是实际方法的cpp代码而不是c。可以使用 C++ 代码创建代理吗?我怀疑是这样,但我不知道我做错了什么。
这是我的测试代理的来源。再简单不过了。
这在编译为 ac 文件时可以正常工作
这是另一个版本,我添加了您对 extern "C" 的建议,但结果与以前相同,找不到库。
这是 nm 命令的输出
nm 命令的跟踪略有不同,但它们都包括 Agent_OnLoad。
这是用于在这两种情况下创建共享库的命令行。
从ldd输出,不工作的情况(g ++)
ldd 的输出,工作用例 (gcc)
使用 linux 大约 15 年了,从来不知道你可以做 LD_DEBUG=all,非常有用。这是有趣的输出
我对此在stackoverflow上进行了搜索,一篇帖子建议为这个符号添加一个全局,所以我添加了 __gxx_personality_v0 作为 void *__gxx_personality_v0;
现在 JVM 在使用 g++ 编译时找到了该库。
java,#gcc
quartz-scheduler - JVMTI 提示和技巧
我想做的是将石英的力量与 jvmti 结合起来。基本上,我的计划是使用 jvmti 来监控内存使用情况,并基于此我将根据使用石英的优先级在 que 上启动/执行进程。我希望每个进程都以 this-process-will-execute-this-amount-of-timeslice 方法完成,以防止无响应并能够处理所有传入的 java 进程,如 Web 请求。
我还没有在任何地方找到关于这个主题的教程(我能找到的教程很少,但对于像我这样的菜鸟来说还不够),这是 c 编程和 java 编程的结合。我目前拥有的是带有 c/c++ 插件的 netbeans ide,虽然我还没有完成 mingw 的安装,但我认为我可以处理这个问题,而且还有来自 orasun 的 jvmti 参考资料。
你们能指导我该怎么做吗?工具?参考资料?我可以查看/结帐的现有类似项目?我只是想加快这个速度,如果这里有人有类似的经历,会分享她/他的经历。
干杯!
java - 未加载 JVMTI
我正在尝试使用 JVMTI 来用 C++ 编写一个小的 Java 调试器。我在这里读到:http:
//java.sun.com/developer/technicalArticles/Programming/jvmti/
JVM 应该调用定义为的导出方法
JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved)
但是,即使我启动我的 java 目标程序,当我运行我的调试器时,我也看不到这个方法被调用。
这是启动此 JVMTI 的正确方法吗?是否应该在启动 java 程序时自动调用它?
java - 如何使用 JVMTI 获取 java 对象的内存地址(不是哈希码)
我是 C 和 C++ 的初学者,我不太了解如何使用 JVMTI。我想获取 java 对象的物理内存位置(十六进制)。可能吗?我不想得到像“从这个分析器等获取它”这样的答案......到目前为止,我在 linux 终端中使用这个命令:
libDLL.so 是我使用 c 创建的库,我在其中使用我的 java 应用程序运行它。它确实有效,它与我的代码一起运行,但我不知道如何获取我想要的数据。
例如,我正在使用这个简单的代码:
我想获取我创建的每个新整数数组的内存位置(0x ...)...如果我使用 jvmti 获得一个不错的示例代码,我将非常高兴
reflection - 使用 JNI / JVMTI - 如何确定 jfieldID 是否为静态
如果我使用jvmti_env->GetClassFields(objClass, &numOfFields, &fieldIds);
,我仍然需要决定是调用 GetStatic<Type>Field 还是 Get<Type>Field。如何确定使用哪一个?我知道在 java.lang.reflect.Field 中我可以查询字段的修饰符是否为静态。
我在这里找到了解决方法:http:
//zoo.cs.yale.edu/classes/cs433/programming/examples-java-socket/jdk1.5/hotspot/src/share/vm/runtime/jfieldIDWorkaround.hpp
但是我更喜欢 JVM 的解决方案。
谢谢!
java - JDI:如何在调试器中暂停 Java 应用程序 (JVM)
我正在寻找潜在的 JDI API 以在其执行期间的任意点暂停 JVM。查看BreakPointRequest的createBreakpointRequest 方法需要一个特定的位置。是否有任何其他 API 不需要位置或以某种方式获取可以传递以创建断点的当前位置。
我基本上是在寻找一种附加和暂停应用程序的方法,然后使用 JVMTI 代理接收 BreakPoint 事件的回调以执行进一步处理。谢谢
java - 如何唯一区分Java的对象实例
我目前正在为 Java 1.7 构建本机 JVMTI 代理。问题是我需要索引一些关于特定 Java 对象实例的数据。所以我的问题是我可以使用 jobject 类型的值作为对象的实例 ID 来检索我的索引数据吗?
我已经寻找有关什么是作业类型的语义的任何信息。它是对象内存位置的指针吗?它是堆栈指针地址吗?它是 JVM 内部结构的地址吗?所以我无法弄清楚 jobject 的值在 Java 对象的生命周期中是否是唯一且不可变的。
谢谢你的帮助。
编辑
根据此处找到的 JNI 规范,jobject 似乎是 Object 实例上的指针。
java - 对 jvmti 对象分配回调行为感到困惑
谁能向我解释为什么当 jvm 分配一些 java 对象而不是其他对象时我可以得到回调?这是我正在做的事情:
当我检查我创建的文件时,我没有看到我感兴趣的类,尽管我知道它们在那里,而且 NetBeans 告诉我在 jvm 中恰好有一个该类的实例。有什么想法吗???
尼基塔