![](/img/trans.png)
[英]How do I interpret at Java thread that is RUNNABLE but with no stack trace?
[英]How do I read this line in a Java stack trace?
堆棧很復雜,涉及lambda(注意由於遮蔽而丟失了行號)。 什么“訪問$ lambda $ 12”實際上是什么意思,有沒有辦法在代碼中找到它而不知道實際的行號?
at com.group.RKGroup.com.my.MyClass access$lambda$12(com.group.RKGroup,int,com.my.PType) (RKGroup.java:43324)
行號沒用,因為這個堆棧跟蹤被Proguard阻止了。
在正常情況下,這表示在名為access
的方法中聲明的lambda。 可能是方法中的第12個lambda ......雖然我不會發誓。
請注意,由於混淆,行號丟失。
好的,這解釋了你如何作為一個類名void
[原文如此]。 但這也意味着方法名稱也可能是假的。
唯一可以確定此行所指的是嘗試對字節碼進行反向工程。
此時,我建議您將stacktrace發送給該軟件的供應商,並讓他們幫助您。 如果他們不能或不會,請求訪問源代碼。 如果他們不能或不會給您訪問權限,請尋找新產品。 調試別人的混淆代碼是一場噩夢。
在方法中看起來像lambda
,但......
javac
不生成這樣的名稱(接近那個,但不是那個)。 javac
(即使從未指定過)生成它們
lambda$<method-name-where-used>$<incremental-number>
或者,如果你有這樣的事情:
List<Integer> r = Stream.of(1).map(x -> x).collect(Collectors.toList());
lambda$new$<incremental-number>
請注意,在您的情況下,方法名稱( access
)首先出現,所以這看起來非常像retro-lambda
for android
。 IIRC他們生成這樣的代碼,這也是未指定的,但它真正意味着你的access
方法中有一個lambda表達式,特別是該方法中的第12個lambda。 同樣,IIRC,retro-lambda使用相同的增量方法命名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.