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

不能debug的情况有没有遇到啊? #18

Open
liangxianshen opened this issue Dec 21, 2018 · 5 comments
Open

不能debug的情况有没有遇到啊? #18

liangxianshen opened this issue Dec 21, 2018 · 5 comments

Comments

@liangxianshen
Copy link

No description provided.

@liangxianshen
Copy link
Author

这个项目是可以debug的,奇怪的是我没有发现任何不一样的地方。
https://github.com/JeasonWong/CostTime

@nailperry-zd
Copy link
Owner

@liangxianshen 有字节码插入的地方,源码行号变了,所以不能debug的吧,我这边也有这个问题。暂无解决方案。

@liangxianshen
Copy link
Author

@liangxianshen 有字节码插入的地方,源码行号变了,所以不能debug的吧,我这边也有这个问题。暂无解决方案。

不光不能debug,混淆后的crash日志是没有行号的 哈哈 我继续看看巴掌写的CostTime 那个真的是能debbu,并且也插入字节码了,用的也是ASM

@AllennZhang
Copy link

9、集成到项目后,断点失效,bugly上报异常时,错误出处不能定位行号,unknow source?
private static byte[] modifyClass(byte[] srcClass) throws IOException {
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS)
ClassVisitor methodFilterCV = new MethodFilterClassVisitor(classWriter)
ClassReader cr = new ClassReader(srcClass)
cr.accept(methodFilterCV, 0/ClassReader.SKIP_DEBUG/);
return classWriter.toByteArray();
}
只有当 ClassReader.accept(ClassVisitor cw,int flag)的第二个参数是0的时候,生成的class字节码反编译后可正常读取行号等信息。

@AllennZhang
Copy link

为了访问行号和局部变量名,ClassReader 类可能需要引入“人为”Label 对象,也就是说,跳转指令并不需要它们,它们只是为了表示调试信息。这可能会在诸如 3.2.5 节介绍的情景中导致错误判断,在该情景中,指令序列中部的一个 Label 被认为是一个跳转目标,因此禁止这一序列被删除。
为避免这种误判,可以在 ClassReader.accept 方法中使用 SKIP_DEBUG 选项。有了这一选项,类读取器不会访问调试信息,不会为它创建人为标记。当然,调试信息会从类中删除,因此,只有在不会为应用程序造成问题时才能使用这一选项。
注意:ClassReader 类提供了其他一些选项,比如:SKIP_CODE,用于跳过对已编译代码的访问(如果只需要类的结构,那这个选项是很有用的);SKIP_FRAMES,用于跳过栈映射帧;EXPAND_FRAMES,用于解压缩这些帧。
ASM开发手册有讲到, @liangxianshen @nailperry-zd

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

3 participants