栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JVM HotSpot上的Java异常计数器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM HotSpot上的Java异常计数器

我相信有免费的工具可以做到这一点,但是即使制作自己的工具也很容易。JVMTI将提供帮助。

这是我制作的用于跟踪所有异常的简单JVMTI代理:

#include <jni.h>#include <jvmti.h>#include <string.h>#include <stdio.h>void JNICALL ExceptionCallback(jvmtiEnv* jvmti, JNIEnv* env, jthread thread,         jmethodID method, jlocation location, jobject exception,         jmethodID catch_method, jlocation catch_location) {    char* class_name;    jclass exception_class = (*env)->GetObjectClass(env, exception);    (*jvmti)->GetClassSignature(jvmti, exception_class, &class_name, NULL);    printf("Exception: %sn", class_name);}JNIEXPORT jint JNICALL Agent_onLoad(JavaVM* vm, char* options, void* reserved) {    jvmtiEnv* jvmti;    jvmtiEventCallbacks callbacks;    jvmtiCapabilities capabilities;    (*vm)->GetEnv(vm, (void**)&jvmti, JVMTI_VERSION_1_0);    memset(&capabilities, 0, sizeof(capabilities));    capabilities.can_generate_exception_events = 1;    (*jvmti)->AddCapabilities(jvmti, &capabilities);    memset(&callbacks, 0, sizeof(callbacks));    callbacks.Exception = ExceptionCallback;    (*jvmti)->SetEventCallbacks(jvmti, &callbacks, sizeof(callbacks));    (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE, JVMTI_EVENT_EXCEPTION, NULL);    return 0;}

要使用它,请从给定的源代码制作一个共享库(.so),然后使用以下

-agentpath
选项运行Java :

java -agentpath:libextrace.so MyApplication

这将在stdout上记录所有异常类名称。

ExceptionCallback
还接收到发生异常的线程,方法和位置,因此您可以扩展回调以显示更多详细信息。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号