如何在Java堆栈跟踪中读取此行?

时间:2018-02-22 14:04:52

标签: java

堆栈很复杂,涉及到lambda(注意由于遮蔽而丢失了行号)。 “访问$ lambda $ 12”实际上是什么意思,有没有办法在不知道实际行号的情况下在代码中找到它?

at com.group.RKGroup.com.my.MyClass access$lambda$12(com.group.RKGroup,int,com.my.PType) (RKGroup.java:43324)

行号没用,因为这个堆栈跟踪被Proguard阻止了。

2 个答案:

答案 0 :(得分:3)

在正常情况下,这表示在名为void的方法中声明的lambda。可能是方法中的第12个lambda ......虽然我不会发誓。

  

请注意,由于混淆,行号会丢失。

好的,这解释了你如何将<api context="/foreach" name="foreach" xmlns="http://ws.apache.org/ns/synapse"> <resource methods="GET"> <inSequence> <payloadFactory media-type="json"> <format>[ {"id": "1", "type": "object", "name": "first", "bounds":"[[-0.256,51.531],[-0.102,51.656]]", "displayName": "first record"}, {"id": "2", "type": "object", "name": "second", "bounds":"[[-0.256,51.531],[-0.102,51.656]]", "displayName": "second record"}, {"id": "4", "type": "object", "name": "tercero", "bounds":"[[-0.256,51.531],[-0.102,51.656]]", "displayName": "tercer record"} ] </format> <args/> </payloadFactory> <log level="full"> </log> <foreach expression="//jsonArray/jsonElement"> <sequence> <payloadFactory media-type="xml"> <format> <result xmlns=""> <name>$1</name> <bounds>$2</bounds> </result> </format> <args> <arg evaluator="json" expression="$.displayName"/> <arg evaluator="json" expression="$.bounds"/> </args> </payloadFactory> </sequence> </foreach> <property name="messageType" scope="axis2" type="STRING" value="application/json"/> <log level="full"/> <respond/> </inSequence> <outSequence> <send/> </outSequence> <faultSequence/> </resource> </api> [sic]作为一个班级名称。但这也意味着方法名称也可能是假的。

唯一可以确定此行所指的是尝试对字节码进行反向工程。

此时,我建议您将堆栈跟踪发送给此软件的供应商,并让他们帮助您。如果他们不能或不会,请求访问源代码。如果他们不能或不会给您访问权限,请寻找新产品。调试别人的混淆代码是一场噩梦。

答案 1 :(得分:1)

在方法中看起来像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的{​​{1}}非常相似。 IIRC他们生成这样的代码,这又是未指定的,但它真正意味着你的android方法中有一个lambda表达式,特别是该方法中的第12个lambda。同样,IIRC,retro-lambda使用相同的增量方法命名。