2016-03-15 52 views
0

我想调试一个jit函数。就像下面的源代码一样,我想调试FibF函数,但是当我通过gdb调试它时,似乎无法运行到函数范围。如何调试它?先谢谢你。如何在llvm中调试jitted函数?

// 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); 

回答

2

如果你喜欢全面的调试经验,函数名,行号和变量名,你需要添加调试信息,当你JIT代码。 Part 9 of the Kaleidoscope tutorial演示如何将调试信息添加到JITted代码。

+0

现在这个链接似乎已经死了。此外,新的ORC JIT似乎不支持调试JIT代码。我相信这些信息已经转移到第9章了:https://llvm.org/docs/tutorial/LangImpl09.html – PaulR

+0

@PaulR现在已经在第9部分了,谢谢你的提醒! – Oak