int max_frame_count = 50;
jvmtiFrameInfo frames[max_frame_count];
jint count;
(*jvmti_env)->GetStackTrace(jvmti_env, thread, 0, max_frame_count, frames, &count);
for (int loop = 0; loop < count; loop++) {
jvmtiFrameInfo frame = frames[loop];
jmethodID currentMethod = frame.method;
(*jvmti_env)->GetMethodName(jvmti_env, currentMethod, &name_ptr, &signature_ptr, &generic_ptr);
(*jvmti_env)->GetLineNumberTable(jvmti_env, currentMethod, &entry_count_ptr, &table_ptr);
jint lineNumber = -1;
int lineNumberCount;
jlocation prevLocationId = -1;
if (frame.location != -1) {
for (int lineNumberLoop = entry_count_ptr - 1; lineNumberLoop >= 0; lineNumberLoop--) {
jvmtiLineNumberEntry lineNumberEntry = table_ptr[lineNumberLoop];
if (frame.location >= lineNumberEntry.start_location) {
lineNumber = lineNumberEntry.line_number;
break;
}
}
}
}
你的想法是对的。若要通过jlocation
查找行号,您需要使用最接近的start_location
来查找jvmtilinenumberentry
,该start_location
小于或等于jlocation
。
实际上,官方的JVM TI示例执行类似的搜索:
HeapTracker.c
error = (*jvmti)->GetLineNumberTable(jvmti, finfo->method, &lineCount, &lineTable);
if ( error == JVMTI_ERROR_NONE ) {
/* Search for line */
lineNumber = lineTable[0].line_number;
for ( i = 1 ; i < lineCount ; i++ ) {
if ( finfo->location < lineTable[i].start_location ) {
break;
}
lineNumber = lineTable[i].line_number;
}
} else if ( error != JVMTI_ERROR_ABSENT_INFORMATION ) {
check_jvmti_error(jvmti, error, "Cannot get method line table");
}
for ( i = start ; i < count ; i++ ) {
if ( location < table[i].start_location ) {
HPROF_ASSERT( ((int)location) < ((int)table[i].start_location) );
break;
}
line_number = table[i].line_number;
}
本文向大家介绍Java获取JVMTI环境,包括了Java获取JVMTI环境的使用技巧和注意事项,需要的朋友参考一下 示例 内部Agent_OnLoad方法:
为了帮助 Java 开发人员诊断和跟踪 Java 线程状态的切换,Sun 公司在 Java 开发工具包(Java2 Software Development Kit, JDK)1.5.0 版本中引进了 Java 虚拟机工具接口(Java Virtual Machine Toolkit Interface,JVMTI),用于替代在先前的 JDK 版本中作为试验功能存在的 Java 虚拟机剖析接口(J
我需要读取excel文件并突出显示重复的行,而不需要编辑excel或添加新的列/行。我使用读取excel文件,并使用读取所有重复行,但不包括'mark4'。问题是,我无法提取这些行号来与一起使用,以突出显示excel中的那些行,因为这些行不包括在DF中。 我试过,但由于没有唯一的行,所以无法提取数据。 的输出为: [6行x170列] 我需要提取那些不属于excel列的行号,并将它们作为列表用于将来
问题内容: 我有以下查询: 如何检查是否有行,如何只返回第一行(如果有匹配项,则只能返回一行)? 问题答案: 使用 得到之一,正是一个结果。在所有其他情况下,它将引发你可以处理的异常: 还有,它将为你提供可能的第一个结果,而不会引发这些异常。但是,由于你要处理没有结果或超出你的想象的情况,因此正是你应该使用的方法。
问题内容: (.issues[] | {key, status: .fields.status.name, assignee: .fields.assignee.emailAddress}) 输出: 但是我需要解析每一行,但是就密钥组而言,很难确定哪个受让人对应哪个密钥。使用jq可以使一束成行吗? 预期产量: 要么 问题答案: 您可能需要的是 使用上面发布的输出,可以进行进一步处理: 给予 或者您