Как отладить jitted-функцию в llvm?

Я хочу отладить 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);

person richardzhu    schedule 15.03.2016    source источник


Ответы (1)


Если вам нравится полный опыт отладки с именем функции, номерами строк и именами переменных, вам нужно добавить информацию об отладке, когда вы выполняете JIT-код. Часть 9 учебного пособия Kaleidoscope демонстрирует, как добавлять отладочную информацию в JIT-код.

person Oak    schedule 16.03.2016
comment
Ссылка, кажется, мертва сейчас. Кроме того, новый ORC JIT, по-видимому, не поддерживает отладку JIT-кода. Я полагаю, что информация переместилась в главу 9: llvm.org/docs/tutorial/LangImpl09.html< /а> - person PaulR; 07.08.2017
comment
@PaulR действительно сейчас в 9-й части, спасибо за предупреждение! - person Oak; 07.08.2017