调试处理略有不同的输入

时间:2009-07-31 02:17:52

标签: java debugging

我目前正在研究Java编译器。在编译器的上下文中,稍微不同的输入可能导致不同的输出(例如,在Java中添加final允许编译器执行更多优化)。在其他一些情况下,不同的输入可能会导致相同的输出(例如,为每个循环去除一些构造)。

在调试编译器处理这些情况的方式时,我通常运行编译器并尝试找出编译器的运行时执行路径偏离(或收敛)的位置。不用说,这很乏味。

我想知道您是否有任何可以帮助我调试这些情况的提示。

此外,是否有任何工具可以跟踪两个程序执行并为您提供执行路径的差异。

1 个答案:

答案 0 :(得分:2)

我正在研究CLI字节代码 - >本机代码JIT,这是不同的,但我们面临着类似的障碍。我在其中添加了一个特殊的ToString方法,它将打印字节代码的当前状态以及强类型评估堆栈等。它允许我使用文本差异工具在每个步骤中直观地检查代码转换。最后,我想制作一个调试器可视化工具,在每一步都“ToString”代码,让我直接在调试器中向后/向前走,并突出显示更改。

如果您完全打印语法树,则可以以类似的方式对其进行区分。

编辑:我编写了一个基本的Annotator类,它将IL字节代码与生成的本机代码的汇编语言表示交错。它有一个ToHtmlString()方法,允许我利用Visual Studio调试器中内置的HTML Visualizer。请不要批评ARM代码 - 我只是攻击了一些东西,所以我可以专注于Annotator,现在它正在工作,我会用它来处理正确的codegen。

右键单击→查看图像,如果要查看其大小合适。 :)

alt text
(来源:280z28.org