在llvm中获取局部变量的实际值

时间:2017-07-02 19:43:04

标签: clang llvm llvm-clang llvm-ir

如果我有这个例子:

int a=0, b=0;

a和b是局部变量,并对其值进行任何修改,例如:

a++;
b++;

我需要在运行MCJIT期间获取此行代码中的值。

我的意思是值不是Value类,而是实际的整数或任何类型的值。

2 个答案:

答案 0 :(得分:0)

您需要从JITed LLVM函数返回值,以便从调用MCJIT的代码中检索它。

查看此Kaleidoscope example

相关代码位于HandleTopLevelExpression():

if (FunctionAST *F = ParseTopLevelExpr()) {
  if (Function *LF = F->Codegen()) {
    // JIT the function, returning a function pointer.
    void *FPtr = TheHelper->getPointerToFunction(LF);

    // Cast it to the right type (takes no arguments, returns a double) so we
    // can call it as a native function.
    double (*FP)() = (double (*)())(intptr_t)FPtr;
    fprintf(stderr, "Evaluated to %f\n", FP());
  }
}

答案 1 :(得分:-1)

在执行要检查值的语句后设置断点。在控制台(lldb) po <variable name>

虽然我认为观察点更适合您的要求,但请为变量添加观察点,例如watchpoint set variable <variable key path>