问题标签 [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 投票
3 回答
2764 浏览

android - Android API 中的检测类

我对 Android API 有疑问。Android API 提供了一个名为“Instrumentation”的类。这个类有什么用?Instrumentation 类是否只能与 Junit 一起用于单元测试。

可以使用 Junit 框架来测试 Android API 的方法,而无需使用 Instrumentation 类。

由于 Android 包中已经包含了 Junit 包,希望我们不需要单独使用 install 进行单元测试。

如果您能向我提供这些信息,我将不胜感激,因为我在网络上的任何地方都找不到这些明确的信息。

如果我们使用Junit测试框架来测试Android API,我们可以得到UI格式而不是测试格式的测试结果吗?

非常感谢。珍惜你的时间。

问候, 里亚斯

0 投票
2 回答
854 浏览

c - 给 dladdr() 带来问题的宏

我已经使用-finstrument-functionsgcc 的选项和这个(简化的)代码实现了跟踪行为:

这很好用,除了一件事:宏也会被处理,但函数会打印包含宏的函数的信息。

因此,包含宏的函数会多次打印其信息(这当然是不希望的)。

有什么可以检测到正在处理宏吗?或者是否可以完全关闭检测宏?

PS同样的问题发生sizeof()

编辑:澄清:我正在寻找一种解决方案来防止宏与检测功能混淆(他们不应该这样做)。不适用于跟踪宏、函数和/或其他事物的方法。

0 投票
2 回答
399 浏览

c# - .NET 中是否有与 Java 的 ClassFileTransformer 等价的东西?(一种替换类的方法)

到目前为止,我一直在寻找这个,但没有运气。ClassFileTransformer.NET 中是否有与 Java 等效的版本?基本上,我想创建一个在加载类时调用的类CustomClassFileTransformer(在 Java 中将实现 interface ClassFileTransformer),并允许对其进行调整并用调整后的版本替换它。

我知道有一些框架可以做类似的事情,但我一直在寻找更直接的东西,比如实现我自己的ClassFileTransformer. 是否可以?


编辑#1。关于我为什么需要这个的更多细节:

基本上,我有一个 C# 应用程序,我需要监视它要运行的指令,以便检测对字段(操作LdfldStfld)的读或写操作,并在读/写发生之前插入一些指令。

我知道如何做到这一点(除了需要调用我来替换类的部分):对于我要监视其代码的每个方法,我必须:

  1. 获取方法的MethodBody使用MethodBase.GetMethodBody()
  2. 将其转换为字节数组MethodBody.GetILAsByteArray()。它返回的byte[]包含字节码。
  3. 按照此处的说明分析字节码,可能通过更改数组的内容插入新指令或删除/修改现有指令。
  4. 创建一个新方法并使用新的字节码创建它的主体,MethodBuilder.CreateMethodBody(byte[] il, int count)其中il是带有字节码的数组。我将所有这些经过调整的方法放在一个新类中,并使用新类替换最初要加载的类。

替换类的另一种方法是在调用方法时以某种方式得到通知。然后我会用对我自己的调整方法的调用替换对该方法的调用,我只会在第一次调用时调整它,然后我会将它放入字典中以供将来使用,以减少开销(用于将来的调用我只是查找方法并调用它;我不需要再次分析字节码)。我目前正在研究如何做到这一点,LinFu看起来很有趣,但如果有类似的ClassFileTransformer东西会更简单:我只是重写类,替换它,让代码在不监视任何东西的情况下运行。

附加说明:类可能是密封的。我希望能够替换任何类型的类,我不能对它们的属性施加限制。


编辑#2。为什么我需要在运行时执行此操作。

我需要监控正在发生的一切,以便能够检测到对数据的每一次访问。这也适用于库类的代码。但是,我无法提前知道将使用哪些类,即使我知道所有可能加载的类,调整所有类而不是等待查看它们是否真正被调用或不是。


可能(但相当硬核)的解决方案。如果有人感兴趣(我看到这个问题很受欢迎,所以我猜有人是),就是我现在正在看的。基本上我必须实现分析 API,并且我将注册我感兴趣的事件,在我的情况下,每当 JIT 编译开始时。博文摘录:

  • 在 ICorProfilerCallback2::ModuleLoadFinished 回调中,调用 ICorProfilerInfo2::GetModuleMetadata 以获取指向该模块上元数据接口的指针。
  • 您想要的元数据接口的 QI。在 MSDN 中搜索“IMetaDataImport”,并通过目录查找元数据接口上的主题。
  • 一旦进入元数据领域,您就可以访问模块中的所有类型,包括它们的字段和函数原型。您可能需要解析元数据签名,并且此签名解析器可能对您有用。
  • 在您的 ICorProfilerCallback2::JITCompilationStarted 回调中,您可以使用 ICorProfilerInfo2::GetILFunctionBody 来检查原始 IL,然后使用 ICorProfilerInfo2::GetILFunctionBodyAllocator 和 ICorProfilerInfo2::SetILFunctionBody 来用您自己的 IL 替换该 IL。

好消息:当 JIT 编译开始时我会收到通知,我可以在那里替换字节码,而不必担心替换类等。不太好消息:你不能从 API 的回调方法调用托管代码,这是有道理的,但意味着我自己解析 IL 代码等,而不是能够使用 Cecil,这将是一件轻而易举的事。

如果不使用 AOP 框架(例如PostSharp),我认为没有更简单的方法可以做到这一点。如果有人有任何其他想法,请告诉我。我还没有将问题标记为已回答。

0 投票
1 回答
1840 浏览

android - android 仪器测试套件

我在 com.app.myapp.test 包中编写了两个测试用例,当我尝试运行它们时,它们都没有被执行,只有一个测试用例被执行并停止。

我在同一个包中编写了以下测试套件

AllTests.java

此测试套件的代码和位置是否正确?

0 投票
4 回答
8925 浏览

android - GUI testing with Instrumentation in Android

I want to test my Android applications UI, with keyevents and pressed buttons and so on. I've read som documentation that Instrumentation would be able to use for this purpose.

Anyone with expericence with using Instrumentation for UI testing?

0 投票
6 回答
9467 浏览

visual-studio-2010 - 如何使用 VS 2010 或 VS 2013 分析签名程序集

我有一个使用 AjaxControlToolkit.dll 和 Log4Net.dll 的网站。

当我尝试在 VS 2010 中运行性能分析工具时,它给了我以下警告:

AjaxControlToolkit.dll 已签名并且检测它将使其签名无效。如果您在没有仪器后事件的情况下继续对二进制文件重新签名,则它可能无法正确加载。

现在,如果我选择继续而不重新签名的选项,分析将开始,但程序集不会加载并给出 ASP.NET 异常。

0 投票
2 回答
1291 浏览

java - java.lang.instrument 有多成熟?

我将从事一个检测相对复杂的 java 应用程序的项目,我计划使用 java.lang.instrument 连接到 JVM 并在加载类之前重新定义它们。

你对这个包裹有什么看法?它是否在 JVM 中得到很好的支持?它与热点配合得很好吗?

谢谢!

0 投票
2 回答
316 浏览

java - 字节码和对象

我正在做一个字节码检测项目。目前在处理对象时,验证器大部分时间都会抛出错误。所以我想弄清楚关于对象规则的事情(我阅读了 JVMS 但找不到我正在寻找的答案):

我正在检测新指令:

原始字节码

仪器后

请注意,我添加了对 Profiler.handleNEW() 的调用,该调用将对象引用(新创建的对象)作为参数。

上面的代码会引发 VerificationError。如果我不添加 INVOKESTATIC(只留下 DUP),它不会。那么我违反的规则是什么?我可以复制一个未初始化的引用,但我不能将它作为参数传递?我将不胜感激任何帮助。谢谢

0 投票
1 回答
61 浏览

.net - 检测字符串

在 C++ 时代的某个地方,我制作了一个库,它启用了计算历史的字符串表示。具有如下数学表达式:

我可以渲染它的字符串表示:

C++ 运算符重载允许用复杂的自跟踪实体替换简单类型,该实体具有对象发生的一切的内部树表示。

现在我希望对 NET 字符串有同样的可能性,只是我希望看到影响字符串的代码中所有位置的堆栈跟踪,而不是变量名。

我希望它可以与现有代码和现有编译程序集一起使用。

此外,我希望所有这些都连接到 Visual Studio 调试器中,这样我就可以设置一个断点,并查看字符串发生的所有事情。

哪种技术会允许这种事情发生?

我知道这听起来像是一个乌托邦,但我认为 Visual Studio 代码覆盖工具在检测程序集时实际上做了同样的工作。

0 投票
1 回答
1314 浏览

c# - Visual Studio 2010 Professional - 问题单元测试 Web 服务

在 Visual Studio 2010 Professional 中创建了一个非常简单的 Web 服务 (asmx),并且正在尝试使用自动生成的单元测试用例。我在这个网站上得到了一些似乎很熟悉的东西:

网站无法正确配置;获取 ASP.NET 进程信息失败。请求http://localhost:81/zfp/VSEnterpriseHelper.axd返回错误:远程服务器返回错误:(500)内部服务器错误。

运行 Visual Studio ASP.NET 单元测试时出现 500 错误

我尝试过:
1. 在 IIS 而不是 ASP.NET 开发服务器上运行测试
2. 在我的 Web 服务的 .config 文件中添加然后删除 XML 片段
3. 授予 MACHINE\ASPNET 帐户对本地文件夹的完全控制权

我当前的问题:
1. 为什么我会被这个检测/代码覆盖 DLL 困扰,而这似乎不是 Visual Studio 2010 Professional 附带的东西?有什么办法可以关掉吗?
2. 我将节点放在 Web.config 下 - 这是正确的节点吗?
3.是否可以不使用webby测试属性绑定到web服务?

我见过其他人建议使 Web 服务尽可能轻量级。我正在尝试使用 jQuery / AJAX / JSON 来调用它,因此能够调试实际的 Web 服务将非常有帮助。

最好的祝愿,