Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion module/incision/TECHNICAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ private fun resolve(): Instrumentation? {

**self-attach 的固有阻碍**:

- JDK 9+:默认 `jdk.attach.allowAttachSelf=false`,需显式打开
- JDK 9+:默认禁止当前进程 attach 自身;如需启用,必须在 JVM 启动参数中设置 `-Djdk.attach.allowAttachSelf=true`。Incision 不会在运行时修改这个进程级属性,因为 HotSpot 读取的是启动快照,而 ByteBuddy 等库读取实时属性,修改会造成策略分裂并影响其他插件
- JDK 21+:无 `-XX:+EnableDynamicAgentLoading` 时打印警告并最终禁止
- Paper/Spigot 生产配置:常以安全硬化名义禁用 self-attach
- 精简 JRE:可能缺 `tools.jar` 或 `jdk.attach` 模块
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ import java.util.jar.Manifest
*
* JDK 9+:
* - 直接使用内建 `com.sun.tools.attach`(jdk.attach 模块)
* - 若进程未启用 `jdk.attach.allowAttachSelf=true`,尝试动态 set 系统属性后再 attach
* - 只有 JVM 启动时已启用 `jdk.attach.allowAttachSelf=true` 才允许进程内 attach;
* 运行时修改该属性不会改变 HotSpot 的启动快照,且会误导其他插件的 attach 策略。
*/
object ManualSelfAttach {

Expand All @@ -33,9 +34,6 @@ object ManualSelfAttach {
fun attach(): Instrumentation {
captured?.let { return it }

// 启用 self-attach(JDK 9+)
System.setProperty("jdk.attach.allowAttachSelf", "true")

val vmClass = loadVirtualMachineClass()
val pid = currentPid().takeIf { it > 0 }
?: throw Trauma.Attach.InstrumentationUnavailable("无法获取当前进程 PID")
Expand Down
Loading