问题标签 [byteman]

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 投票
1 回答
595 浏览

java - 如何在运行时更改 byteman 的规则

我正在运行远程测试服务器,我想使用 byteman 对现有代码进行一些修改。

是否可以在运行时使用自定义规则文件附加 byteman(开始时我们应该设置规则文件,这在大多数情况下并不灵活)?

是否可以在启动服务器时将其附加到正在运行的服务器而不添加 -javaagent?

0 投票
1 回答
811 浏览

java - 使用 byteman 修改方法参数

我有如下所示的课程

我想编写一个 byteman 规则来捕获caller.invoke("suman");方法调用并将参数“suman”修改为“suman1”。这意味着calle.invoke(arg);Caller课堂上,参数应该是“suman1”。我尝试使用 byteman 规则捕获参数,但我不知道如何修改参数。

你能帮忙吗?

0 投票
1 回答
217 浏览

junit - Byteman JUnit Runner - 无法在自动关闭的 InputStream#close 上触发 IOException

我有以下代码:

当我提供的(有效)输入流应该被关闭时,我正在尝试使用 Byteman Junit Runner 来触发 IOException:

我的测试失败:errors 总是空的,这意味着 Byteman 规则显然没有被执行(它被代理很好地加载,所以我不明白发生了什么)。

如何在通过 try-with-resources 调用的 close 方法上触发 IOException?

0 投票
2 回答
1342 浏览

java - Byteman - 跟踪给定包中的所有类和方法

使用 Byteman 时,我们必须在规则语法中指定类和方法。如果我想使用 Byteman 跟踪程序执行怎么办?

示例:我不知道在执行程序的某个功能时正在执行哪些方法。我想在功能执行期间识别调用的方法。

这是否意味着我必须为给定包中每个类的每个方法添加规则?或者有没有其他方法可以实现这一目标?

0 投票
1 回答
156 浏览

java - Byteman 阻止 Wildfly 8.1.0 启动?

当我的 wildfly 8.1.0 服务器启动时,它应该创建一个类的实例。

我不确定这是否发生,而且我无法更改源代码,所以我想我会使用 Byteman 来完成这个。

我为 Byteman 编写了这个规则文件,存储在C:\app\ECLSManagedConnectionFactory.btm

我下载了 Byteman 并将其解压缩到C:\byteman-3.0.3.

我修改了我的java_opts并让wildfly在启动期间回显了该值:

如果上面的第 2 行和第 3 行不存在,我的服务器会成功启动java_opts,但是当我添加它们时,服务器根本不会启动。stdout 或 stderr 没有任何迹象表明正在发生的事情。我收到一条消息,要求检查server.log更多信息,但该文件不存在。

我究竟做错了什么?我已经尝试了路径的斜线方向的每种组合(如果这很重要,在 Windows 10 上)。

真的有人用过这个byteman工具吗?我很惊讶它在 Stack Overflow 上没有标签,而且网上可用的信息如此之少。

0 投票
1 回答
925 浏览

mule - ByteBuddy 1.10.2 抛出 `java.lang.IllegalStateException: Cannot resolve type description for java.lang.Exception`,和类似的

Cannot resolve type description在为. AgentBuilder.Listener.onError(...)_AgentBuilderInstrumentation

代理代码为:

这是使用 ByteBuddy v1.10.2 和 Mule 4 (jdk1.8) 作为目标应用程序。

这里有一篇关于同样问题的类似帖子,但回复并没有让我找到解决方案。

输出显示“来自 bytebuddy:agent premain”,但未显示“来自 bytebuddy:transform”。相反,日志显示属于引导类加载器的许多类的异常,例如:

似乎正在查询类型描述的类加载器没有提供所需的类。ClassFileLocator有没有办法为这些查找指定替代方案?

导致错误的特定类加载器是: org.mule.runtime.module.artifact.api.classloader.MuleArtifactClassLoader

有趣的是,当使用 Byteman 作为代理时,该工具按预期工作,具有以下规则文件:

任何意见,将不胜感激!谢谢您的帮助!

0 投票
1 回答
32 浏览

byteman - Byteman 4.0.11 没有完全发布到 Maven Central?

Byteman 网站发布了 4.0.11 版本的广告:https ://byteman.jboss.org/downloads.html

但是 Maven Central 上只有一些工件 ID 可用:https ://search.maven.org/search?q=g:org.jboss.byteman

发布过程中有什么问题吗?工件 ID 是否发生了变化?

0 投票
1 回答
33 浏览

bytecode-manipulation - Byteman 实施细节

我正在查看 byteman 实现,以了解它们如何专门用于跟踪变量 AT/AFTER nth read、AT/AFTER nth write 等情况。在他们的实现中,他们读取一个类两次以检查它是否与指定的规则匹配用户使用 RuleCheckMethodAdapter,第二次使用 RuleTriggerAdapter 在类中感兴趣的位置实际注入字节码(触发器)。我不明白的是为什么我们需要 2 次通过,为什么不能在第一次通过时,如果与规则匹配,我们可以添加触发器?对此的任何见解都会有所帮助。

0 投票
3 回答
119 浏览

java - 是否可以使用 ByteBuddy 拦截数组构造函数?

我有一个回归测试,我试图计算数组实例化的数量。具体来说,我有兴趣计算new int[..]被调用的次数。我已经整理了以下基于 ByteBuddy 建议的工具,我认为它们应该可以捕获所有构造函数,但这不适用于数组(任何类型的):

当我运行这个测试时,我得到以下结果:

如果我更改final Object[] y = new Object[3]new Object(),则输出为:

我已经使建议工具尽可能开放(至少在我认为可以做到的范围内开放),但这仍然没有检测数组对象的构造。

甚至可以检测数组对象的构造吗?

2020-07-28 更新

根据原始问题的上下文,提供的答案表示 ByteBuddy 不直接支持new int[]. 但是,对于那些对替代解决方案感兴趣的人,我能够使用Byteman实现这种检测。

0 投票
1 回答
81 浏览

wildfly - 跟踪 Wildfly 18 中部署的 WAR 文件中的类

我想在 Wildfly 18 中部署的应用程序中的方法上添加一些跟踪。

我只能看到从 Windows 命令提示符的控制台输出(不是 server.log)加载并打印了第一条规则,但从未打印过另一条规则。