Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在hook log相关方法时,如果打开日志输出,会StackOverflowError #59

Closed
CB2Git opened this issue Feb 7, 2024 · 1 comment

Comments

@CB2Git
Copy link

CB2Git commented Feb 7, 2024

说明

尝试hook Log的方法,当我设置PineConfig.debug为true的时候,会出现StackOverflowError,当我设置PineConfig.debug为false,一切正常

可复现代码

PineConfig.debug = true

Pine.hook( Log::class.java.getDeclaredMethod("i", String::class.java, String::class.java),
	object : MethodHook() {
		override fun beforeCall(callFrame: Pine.CallFrame) {
		}

		override fun afterCall(callFrame: Pine.CallFrame) {
		}
	})

异常堆栈

FATAL EXCEPTION: main
Process: com.shein.carsh, PID: 15464
java.lang.StackOverflowError: stack size 8192KB
	at android.icu.util.ULocale.equals(ULocale.java:697)
	at android.icu.impl.ICUCurrencyDisplayInfoProvider.getInstance(ICUCurrencyDisplayInfoProvider.java:43)
	at android.icu.text.CurrencyDisplayNames.getInstance(CurrencyDisplayNames.java:38)
	at android.icu.util.Currency.getName(Currency.java:542)
	at android.icu.util.Currency.getSymbol(Currency.java:489)
	at android.icu.util.Currency.getSymbol(Currency.java:479)
	at java.util.Currency.getSymbol(Currency.java:497)
	at java.text.DecimalFormatSymbols.initialize(DecimalFormatSymbols.java:713)
	at java.text.DecimalFormatSymbols.<init>(DecimalFormatSymbols.java:102)
	at java.text.DecimalFormatSymbols.getInstance(DecimalFormatSymbols.java:156)
	at java.util.Formatter.getZero(Formatter.java:2287)
	at java.util.Formatter.<init>(Formatter.java:1896)
	at java.util.Formatter.<init>(Formatter.java:1918)
	at java.lang.String.format(String.java:2870)
	at top.canyie.pine.Pine.log(Pine.java:745)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:85)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
	at top.canyie.pine.entry.Arm64Entry.intBridge(Arm64Entry.java:28)
	at top.canyie.pine.Pine.handleCall(Pine.java:660)
	at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
@CB2Git CB2Git changed the title when hook Log.i , i StackOverflowError 在hook log相关方法时,如果打开日志输出,会StackOverflowError Feb 7, 2024
@canyie
Copy link
Owner

canyie commented Feb 7, 2024

那我能咋办嘛……
为什么会有 hook log 这种需求……

@canyie canyie closed this as not planned Won't fix, can't repro, duplicate, stale Feb 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants