gpt4 book ai didi

llvm - 调试LLVM IR

转载 作者:行者123 更新时间:2023-12-04 04:17:47 27 4
gpt4 key购买 nike

我建立了一个LLVM定位前端,该前端会产生一些IR。随后并且完全可以预期,在某些情况下,IR输出是不正确的(例如,它看起来正确,但是执行时结果程序崩溃)。但是,我还没有找到很多有用的工具来解决这一问题。

我曾尝试使用lli,但是错误消息输出却无济于事(当您认为解释器可以提供非常准确的错误详细信息时)。

我研究了将IR转换为C代码,然后使用Visual Studio进行调试,但似乎此功能已从LLVM中删除。

我还研究了与GDB的关系。但是,DWARF调试信息格式似乎专门针对几种现有语言,此外,我要用前端转换的源是正确的,这是产生的IR错误,因此原始源的调试符号将不会不太有用-例如,我需要查看一堆中间寄存器值的值,这些值不对应于任何源变量或编译器生成的函数中的断点。

有哪些工具和技术可以调试LLVM IR输出?

最佳答案

我不确定我是否完全理解您的问题。您是说编译器(从语言X到LLVM IR)产生不正确的输出(不正确的LLVM IR),并且不确定如何调试它吗?换句话说,有两种可能性:

  • 编译器生成的IR不正确-您可以指向一些指令并说-这不是我要生成的。
  • IR似乎正确,但是没有产生我期望的结果。

  • 我认为这是您正在谈论的(1)(因为这是问题的意思,在您进行更新之前)

    那么,这将不是LLVM特有的问题。假设您正在编写从X语言到 native 代码的编译器。产生的 native 代码不正确-如何调试问题?好吧,很明显,您调试了编译器。您尝试找到编译器对输入的理解正确的最后位置,或寻找错误的第一位置。如何做到这一点在很大程度上取决于编译器的体系结构。但是,对您有用的是在编译器中具有其他中间层的可打印表示形式。

    例如,Clang(从C,C++和Objective C生成LLVM IR)可以转储其完整的AST。因此,查看AST中不正确的代码可将编译器的工作量减少一半,从而有助于确定问题出在前端(C源-> AST)还是代码源(AST-> LLVM IR)。 LLVM后端(将LLVM IR编译为本地代码)还具有一些中间层(最著名的是SelectionDAG和MI),可以出于调试目的对其进行检查。这些只是YMMV和其他现有编译器的示例。

    关于llvm - 调试LLVM IR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16798803/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com