gpt4 book ai didi

llvm - LLVM IR是否有调试器?

转载 作者:行者123 更新时间:2023-12-03 23:52:06 34 4
gpt4 key购买 nike

我想逐步介绍一下我生成的LLVM IR代码。就llc和lli而言,该代码在语法上是有效的并且类型有效,但是结果不是我所期望的。

这些块足够大,以至于我无法简单地读取该错误就无法成功完成,并且我很难制作一个具有相同错误的较小示例。

我认为我可以使用调试器之类的东西,但是用于LLVM IR。换句话说,我希望能够逐步执行llvm代码,检查“无限”寄存器(根据LLVM IR文件中的名称)和内存位置,设置断点,直到找到代码出了问题的地方。

我调查了llilldb,但似乎都不是我要寻找的工具。 lli将运行我的代码,但不能让我一步一步走。 lldb似乎假定代码是由C前端生成的。

我在lldblli上错了吗?有谁知道一种工具可以完成我想要的功能的50%?

最佳答案

我不知道这样的事情(我怀疑它不存在)。尽管我很乐意分享有关llvm生产的代码调试的观点。


调试生成的代码本身(在gdb中逐步调试)。
利用debugtrap内在函数(仅生成int3或体系结构上的任何等效项)。您可以使用此方法进行断言,并查看其中哪些失败。
给您的指令名称(因此它们不是%0%1而是有意义的%names)-它们在llc输出中显示为注释。
为您的功能构建CFG(控制流程图):opt --dot-cfg 1.ll; dot cfg.funcname.dot -Tpng > 1.png
不要忘记禁用llvm优化(您可以具有后端-O3优化级别,但是IR转换的通过会使调试变得更加困难)。


因此,我建议的工作流程如下。构建CFG(4​​.)和装配体(通过llc)。中断gdb中生成的代码并逐步执行(或使其陷入您的一个断言中)。将您在gdb中停止的位置关联到llc输出,阅读注释,并关联到CFG。神交。

您也可以从生成的代码中构建CFG表示形式。在我所知道的工具中,IDA Pro(一种非常昂贵的构建CFG的方法)和Saga提供了这样的功能。

附注:这最初是一条评论,但时间过长。

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

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