簡體   English   中英

如何在Java堆棧跟蹤中讀取此行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM