7

http://llvm.org/docs/SourceLevelDebugging.htmlで説明され
ているように、次のコードを使用して LLVM IR からソース コードの行番号と列番号を見つけることができます。

if (MDNode *N = I->getMetadata("dbg")) {  // Here I is an LLVM instruction
  DILocation Loc(N);                      // DILocation is in DebugInfo.h
  unsigned Line = Loc.getLineNumber();
  StringRef File = Loc.getFilename();
  StringRef Dir = Loc.getDirectory();
}

でも、もっと正確な情報が欲しい。
AST レベルでは、clang はFullSourceLoc API ( getCharaterData()) を提供するので、AST ノードと元のソース コードの間のマッピングを見つけることができます。そして、LLVM IR とソース コードの間のそのようなマッピングを見つけたいと思っています。
IR のデバッグ情報から正確な文字データを取得することはできますか?

ありがとう。

4

1 に答える 1

7

IR デバッグ情報だけから正確な文字データを取得することは不可能です。最善の方法は、ソース コードを手動でどこかに保存し、デバッグ情報から得た行と列の情報を使用することです。

ところで、Instructions のデバッグ情報を取得する簡単な方法があります。インスタンスをInstruction::getDebugLoc()返します。このインスタンスは、 and でDebugLocクエリできます(ただし、最初にそのメソッドで確認してください)。getLine()getCol()isUnknown

于 2013-08-19T06:04:12.953 に答える