问题标签 [instrumentation]

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.

0 投票
2 回答
414 浏览

.net - 是否有 java.lang.instrument 提供的功能的 .Net 模拟?

我研究了一些著名的面向 AOP 的 .Net 框架,例如 Microsoft 的 PostSharp、bltoolkit、Castle、Cecil 和 Policy Injection Block。也许我很无知,但似乎这些框架不提供在虚拟机加载类时注入代码的能力,在应用程序可见之前。它们似乎都依赖于应用程序对工厂的使用或类/方法级别的属性,这些属性提供了程序集的编译时操作所需的元数据。我正在寻找 的java.lang.instrument的关键特性是在方法调用周围简单地注入拦截器,而无需更改源(方法/类的属性)或重建现有程序集以注入拦截代码。

0 投票
4 回答
2066 浏览

.net - ASP.NET Web 应用程序上的代码检测

一般来说,我对 .NET 开发还很陌生。我想在我的 Web 应用程序上做一些检测来调整性能,尤其是在缓存方面。我已经编写了很多自定义动态生成的 UserControl,我想尝试以不同的方式进行缓存——可能通过 ASPX 页面声明或以编程方式。

我还有很多相互依赖的 Oracle 查询,我想研究一下这些查询的缓存结果,看看什么会提供最佳的性能提升。

解决此问题的最佳方法是什么?不知何故,我不认为使用秒表来查看 IE 加载页面需要多长时间是最好的主意。除了感知延迟之外,我不知道我的缓存是否受到打击或错过。VS2008 是否有内置工具来提供帮助?

0 投票
4 回答
33465 浏览

oracle - PL/SQL 日志记录 - 如何控制?

我希望在我们现有的 Oracle 应用程序中引入一个日志框架来代替 DBMS_OUTPUT 的使用。

该框架将主要用于帮助调试,并详细说明启动 x 过程、参数详细信息、结束过程 x 等。它还应该具有为所有或仅一个程序单元、各种级别的跟踪打开的功能事实上,什么是标准的日志记录功能。

实现这些要求应该相对简单,但是我希望您的帮助是如何最好地关闭和打开此功能。我想要实现的是关闭跟踪时可能的最小性能损失。希望大部分时间都应该这样!

由于应用程序使用的是 10g 第 2 版,我最初喜欢将日志记录机制包装在条件编译中的外观,这样日志记录框架在正常操作期间甚至不可见。不幸的是,我不得不勉强放弃这个想法,因为大多数应用程序都是使用独立的过程和函数构建的,因此打开日志功能可能会使很多代码无效。

我已经查看了几个现有的开源和其他框架\功能以获得灵感:

log4plsql ( http://log4plsql.sourceforge.net/ )

APC在这里的审查, 尤其是在可接受的影响下,让我感到担忧。

OraLog 项目 ( http://oralog.sourceforge.net )

自 2007 年以来没有更新

PL/VISION这里

看起来很旧,自 Oracle 8i 以来没有任何变化?

问汤姆仪器这里

2014 年 1 月 4日更新 Tom Kyte现在推荐 Tyler Muth 的Logger

如果您在 Oracle 应用程序中引入了某种形式的登录,您是如何实现它的,尤其是您如何控制它,那么我真的很想听听您的经验。

0 投票
1 回答
2812 浏览

java - 动态字节码检测 - 问题

我有一个我无法解决的问题。假设我们有以下两个类和一个继承关系:

我想检测其他代码,使其如下所示:

为了实现这个目标,我将我的实现基于java.lang.instrument包,使用带有我自己的类文件转换器的代理。该机制也称为动态字节码检测。

到目前为止小菜一碟。现在,我的测试方法执行以下操作:

代码:

由于检测包中的以下限制,这不起作用:调用时new B(),检测从类 B 开始,并在加载被操作类时以编译错误结束,因为超类 A 还没有 print() 方法!问题出现了,如果以及如何在 B 类之前触发 A 类的检测。我的 classfiletransformer 的 transform() 方法应该用 A 类显式调用!所以我开始阅读并遇到了这个:

java.lang.instrument.ClassFileTransformer.transform()javadoc 说:

每个新的类定义和每个类重新定义都会调用转换器。使用 ClassLoader.defineClass 请求新的类定义。使用 Instrumentation.redefineClasses 或其本机等效项提出类重定义请求。

transform 方法带有一个类加载器实例,所以我想,当 B 的检测开始时,为什么不自己用类 A调用该loadClass方法(loadClass调用)。defineClass我预计仪器方法会因此被调用,但遗憾的是事实并非如此。相反,该类A是在没有检测的情况下加载的。(尽管应该拦截加载过程,但代理不会拦截)

任何想法,如何解决这个问题?您是否看到一个原因,为什么操作某些字节码的代理无法手动加载另一个类,然后希望也可以通过该/任何代理发送?

请注意,由于在操作 B 之前已加载和检测 A,因此以下代码可以正常工作。

非常感谢!

0 投票
2 回答
2723 浏览

java - 用于方法进入/退出的 ASM 字节码检测

我创建了一个 JVMTI 代理,它在高级别执行以下操作:

  • onClassLoadHook 将加载类的字节码发送到一个单独的 Java 进程,该进程将使用 ASM 检测类

  • 取回字节码并加载它们

在我对加载的 Java 类进行检测的单独 Java 进程中,我执行以下操作:

......

当我尝试使用 Java Decompiler 反编译在此检测之后编写的类时 - 我看到以下我知道是错误的反编译函数:

因为我的函数实际上是这样的:

谁能告诉我我在这里做错了什么?我唯一的线索是,如果不是将 THIS 指针作为参数传递给我的函数,而是传入原始类型,那么一切都会顺利进行。我需要管理的 THIS 指针有什么特别之处吗?我已经比较了字节码,并使用了 ASMIFIER 来了解我需要使用哪些语句来生成正确的字节码。

0 投票
2 回答
787 浏览

java - 查找 Java 程序使用反射加载的所有类的名称

为了支持静态分析工具,我想以一种可以确定每个反射调用的方式检测或监视 Java 程序(如 Method.invoke(..)):

1.) 在哪个类 C 上调用这个方法,以及 2.) 哪个类加载器加载了这个 C 类。

理想情况下,我正在寻找不需要我静态修改 Java 运行时库的解决方案,即我正在寻找加载时解决方案。但是,该解决方案应该能够捕获所有反射调用,甚至是在 Java 运行时库本身中发生的此类调用。(我玩过 ClassFileTransformer 但这似乎只适用于 ClassFileTransformer 本身不依赖的类。特别是,ClassFileTransfomer 不适用于“类”类。)

谢谢!

0 投票
1 回答
365 浏览

java - 从 AnnotationProcessor 读取字节码

可能重复:
插入 Java 编译器

编辑- 这似乎是插入 Java 编译器的骗局


我想实现一个AnnotationProcessor用于将类编译为字节码apt调用的工具,它可以读取和修改字节码。

这样做的原因是我想将带注释的方法翻译成另一种语言,并用调用翻译版本的存根替换 java 方法。

然而,该AnnotationProcessorEnvironment接口只提供了生成新类的方法,而不是读回上一轮生成的类文件。

检测 API 的功能与我想要的类似,但仅在运行时。我正在寻找一种在编译时执行此操作的方法。

0 投票
1 回答
816 浏览

java - 字节码检测生成 java 验证程序错误

我正在使用 ASM 来为 Java 程序进行字节码检测。我所做的很简单 - 在检测方法时,如果指令是 PUTFIELD,只需在指令之前执行 DUP_X1,然后访问 PUTFIELD 并使用包含 DUP 的堆栈条目的参数注入函数调用。

代码在检测之前和之后分别如下所示:

但是当我运行检测代码时,我得到:

java.lang.VerifyError:期望在堆栈上找到对象/数组

你能提供任何帮助吗?

0 投票
1 回答
59 浏览

windows-7 - Win7 和 Instrumentation 的第一步

您好,如上一个 pdc 所示,作为开发人员,我们可以利用 SO 功能并向我们的代码添加检测(基于最佳实践)。因此,在该会议中,他们介绍了新的基于 Windows PowerShell 的故障排除平台,以及它如何使您能够轻松监控多个数据源,从而使最终用户和 IT 专业人员能够检测和解决软件问题。但是该演示从未上传,我想知道如何在 Win7 上使用 Instrumentation 来“编写代码”或如何使用一些 prof 工具演示我的代码如何帮助提高软件质量。

我还尝试了 Windows 7 for Developers Training Kit,但演示显然没有使用 WMI

谢谢

0 投票
3 回答
2153 浏览

javascript - Firefox 中的 javascript 配置文件

(我知道有些人已经问过关于 js 配置文件的问题,但如果我理解正确,那不是我所需要的。)

我想跟踪javascript的执行以收集1)调用哪个函数,2)调用函数的时间,以及3)函数的执行时间的信息。

我想在线收集信息(关于已部署的代码),而不是在内部收集信息。因此,权衡必须是轻的。另外,我不想在调用函数的前后手动添加一行。但是,如果有一种方法可以动态检测代码,那就太好了。

提前致谢!