あなたのアプローチはかなり正しいと思います。 UI部分は実装にはかなり時間がかかるので、llvm部分に焦点を当てます。
LLVM-IRを含む入力ファイルから始めましょう。
手順1プロセスモジュール:
ファイルの内容を文字列に読み込みます。あなたは、単に機能に反復することができたら、それで行わ
、およびブロックと指示:
指示に
llvm::MemoryBuffer* buf = llvm::MemoryBuffer::getMemBuffer(llvm::StringRef(fileContent)).release();
llvm::SMDiagnostic diag;
llvm::Module* module = llvm::parseIR(buf->getMemBufferRef(), diag, *context).release();
llvm::DebugInfoFinder* dif = new llvm::DebugInfoFinder();
dif->processModule(*module);
ステップ2反復:それからそれからモジュールをビルドし、それを処理するデバッグ情報を取得します
// pseudo code for loops (real code is a bit long)
foreach(llvm::Function f in module.functions)
{
foreach(llvm::BasicBlock b in f.BasicBlockList)
{
foreach(llvm::Instruction inst in b.InstList)
{
llvm::DebugLoc dl = inst.getDebugLoc();
unsigned line = dl->getLine();
// accordingly populate some dictionary between your instructions and source code
}
}
}
ステップ3更新あなたのUI
これはまた別の話です...
ルックかなり正しい。あなたが達成したいことは、llvmではかなりシンプルですが、多くのUIコードが必要になります –