gpt4 book ai didi

debugging - 如何在llvm源代码级调试信息中表示函数式语言调试信息?

转载 作者:行者123 更新时间:2023-12-02 20:51:34 27 4
gpt4 key购买 nike

我正在为基于 F#(一种函数式语言)的语言开发 llvm 前端。嗯,函数式语言匹配的是值的概念,而不是变量的概念。 F# 还通过所谓的“可变值”支持变量,我可以将其建模为 %llvm.dbg.declare() 来跟踪该值。但我不知道如何跟踪该值。值不是由 alloca 创建的,它只是一个值,不会改变。这些例子都说明了 C 等命令式语言的实现,而 C 语言没有这种不可变的值概念。有人对函数式语言的调试信息有一些建议或提示吗?

最佳答案

对于 SSA 值,您可以使用 @llvm.dbg.value() 而不是 @llvm.dbg.declare。首先,您必须为本地值定义元数据,就像为 @llvm.dbg.declare 定义元数据一样,下面我假设它定义为 !4。 LLVM IR 看起来像

%x = ...
call void @llvm.dbg.value(metadata !{ i32 %x }, i64 0, metadata !4)

我从 http://nondot.org/sabre/LLVMNotes/DebugInfoVariableInfo.txt 获得此信息它描述了mem2reg如何转换调试信息。相对于当前的 LLVM 实践,这可能已经过时,因此您可以使用 alloca@llvm.dbg.declare 编写一些 IR,然后运行 ​​mem2reg 传递到看看调试信息转换为SSA后如何变化。

关于debugging - 如何在llvm源代码级调试信息中表示函数式语言调试信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16412707/

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