transmittable-thread-local icon indicating copy to clipboard operation
transmittable-thread-local copied to clipboard

本地DEBUG进不到JdkExecutorTtlTransformlet里面

Open MentosL opened this issue 2 years ago • 3 comments

env:macos,jdk8

  1. 本地项目里通过new ThreadPoolExecutor方式创建线程池。
  2. 项目里通过@Bean方式注入对应ThreadPoolExecutor到容器里。

通过-javaagent的方式进行启动项目,发现在对应启动过程中,并没进入到JdkExecutorTtlTransformlet中进行增强线程的使用,想请问下当前不生效的原因有哪些(通过arthas查看对应的class文件,发现并没有TtlTransformletHelper类的加载)

MentosL avatar Aug 10 '22 06:08 MentosL

关于agent运行的debug,要查一下资料。 @MentosL 我自己也没去debug过(通过单元测试/集成测试 验证agent功能)。

没进入到JdkExecutorTtlTransformlet中进行增强线程的使用

可能和你的运行方式、使用方式相关。

注意使用稳定版本,目前是2.14.0。 @MentosL JdkExecutorTtlTransformlet还不是稳定版本中的类。

如果要大家来给排查,需要提供一个极简可运行复现问题的demo。 (方便排查的人能运行起来)

oldratlee avatar Aug 29 '22 16:08 oldratlee

谢谢回复。

我本地是通过IDEA debug形式进行查看的,同时服务启动之后,也通过arthas工具查看当前classloader装载情况,发现没有生效的情况。

好的,我晚一点提供一个简单的demo放到这边。

MentosL avatar Aug 31 '22 08:08 MentosL

提供了一个简易版本的 Demo,辛苦大佬麻烦查看下,本地是通过arthas进行查看字节码增强的

MentosL avatar Sep 02 '22 09:09 MentosL

分享一下我的 DEBUG agent 的方案:

  1. 应用程序启动时添加 debug 参数: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 (如果是用 IDE 启动, 请使用正常运行模式启动,而不是debug 模式)
  2. 在 Agent 项目中, 新建远程DEBUG , 连接到本地 5005 端口.

image

这样就能debug agent 了

OrezzerO avatar Dec 19 '22 06:12 OrezzerO

另外一种方案: 在 IDEA 中,把 agent 源码项目作为 module 和你业务项目放在一起就能 debug

jiangyunpeng avatar Jan 12 '23 02:01 jiangyunpeng