Debugging 如何使用%llvm.dbg.value?

Debugging 如何使用%llvm.dbg.value?,debugging,llvm,Debugging,Llvm,我正在开发LLVM IR的前端,并希望附加调试信息。我已经使%llvm.dbg.declare工作,它可以在这个声明之后跟踪我的变量。但是我不明白另一个%llvm.dbg.value的用途,有人能告诉我应该在什么情况下使用它吗?或者任何例子?llvm.dbg.declare如果您在构建代码时没有进行优化(您确实应该这样做),那么就足够了。在非优化代码中,局部变量位于堆栈上(在allocas中),并且llvm.dbg.declare告诉调试器在哪里找到它们 当试图调试优化的代码时,事情变得更加模糊

我正在开发LLVM IR的前端,并希望附加调试信息。我已经使%llvm.dbg.declare工作,它可以在这个声明之后跟踪我的变量。但是我不明白另一个%llvm.dbg.value的用途,有人能告诉我应该在什么情况下使用它吗?或者任何例子?

llvm.dbg.declare
如果您在构建代码时没有进行优化(您确实应该这样做),那么就足够了。在非优化代码中,局部变量位于堆栈上(在
alloca
s中),并且
llvm.dbg.declare
告诉调试器在哪里找到它们

当试图调试优化的代码时,事情变得更加模糊,因为局部变量可以在寄存器中,并且调试器无法检查实际的“内存位置”,从而始终知道局部变量的值。这就是
llvm.dbg.value
的作用-它可以显式地通知调试器一个本地值已经更改,以及它的新值