【发布时间】:2012-12-29 05:56:54
【问题描述】:
我注意到当java代码中有finally子句时,总是会生成.catchall来识别finally块或使用.catchall标签内联它,但我没有找到任何网上的信息是不是这样还是有更多的解释,有人知道吗?
【问题讨论】:
我注意到当java代码中有finally子句时,总是会生成.catchall来识别finally块或使用.catchall标签内联它,但我没有找到任何网上的信息是不是这样还是有更多的解释,有人知道吗?
【问题讨论】:
是的,finally 块是可能生成 .catchall 的一种情况。但是,它也可以用于其他事情。例如,也可以在同步方法的情况下生成,保证锁被释放。
catch all 处理程序记录在dex-format 规范中。具体来说,在 code_item 中包含的 encoded_catch_handler 项中。
同样相关的是classfile specification 中的等效数据。查看异常表中的 catch_type 项。
【讨论】:
我想你可能期望太高了。
您要问的是(实际上)davlik 代码生成器/翻译器的代码生成模式。根据我的经验,人们不会详细描述编译器/代码生成器在幕后所做的事情:
我建议您查看 davlik 翻译器的源代码,看看它实际上做了什么。 (尝试搜索“catchall”...)
请注意,dex 格式规范为您提供了输出“语言”及其含义。这限制了 davlik 翻译器可以做什么,但它不会告诉你翻译器在所有情况下实际上要做什么。
【讨论】: