如何调试llvm中的jitted功能?

时间:2016-03-15 06:08:05

标签: llvm llvm-ir llvm-gcc llvm-c++-api

我想调试一个jit函数。就像下面的源代码一样,我想调试FibF函数,但是当我通过gdb调试它时,似乎无法进入函数范围。怎么调试呢?提前谢谢你。

// We are about to create the "fib" function:
  Function *FibF = CreateFibFunction(M.get(), Context);

  // Now we going to create JIT
  std::string errStr;
  ExecutionEngine *EE =
    EngineBuilder(M.get())
    .setErrorStr(&errStr)
    .setEngineKind(EngineKind::JIT)
    .create();

  if (!EE) {
    errs() << argv[0] << ": Failed to construct ExecutionEngine: " << errStr
           << "\n";
    return 1;
  }

  errs() << "verifying... ";
  if (verifyModule(*M)) {
    errs() << argv[0] << ": Error constructing function!\n";
    return 1;
  }


  // Call the Fibonacci function with argument n:
  std::vector<GenericValue> Args(1);
  Args[0].IntVal = APInt(32, n);
  GenericValue GV = EE->runFunction(FibF, Args);

1 个答案:

答案 0 :(得分:2)

如果您喜欢完整的调试体验,包括函数名,行号和变量名,则需要在JIT代码时添加调试信息。 Part 9 of the Kaleidoscope tutorial演示了如何向JITted代码添加调试信息。