命令 (および変数宣言 - alloca と global) の行番号を取得したい。命令は、命令の配列に保存されます。私は機能を持っています:
Constant* metadata::getLineNumber(Instruction* I){
if (MDNode *N = I->getMetadata("dbg")) { // this if is never executed
DILocation Loc(N);
unsigned Line = Loc.getLineNumber();
return ConstantInt::get(Type::getInt32Ty(I->getContext()), Line);
} // else {
// return NULL; }
}
そして私のmain()には次のものがあります:
errs()<<"\nLine number is "<<*metadata::getLineNumber(allocas[p]);
I->getMetadata("dbg")
は falseであるため、結果は NULLです。
ターゲットプログラムをコンパイルするときやパスを実行するときにフラグを使用するなど、LLVMフレームワークを再構築せずにLLVMでdbgフラグを有効にする可能性はありますか(私は-debugを使用しました)?
「-O3 -g」を指定してプログラムをコンパイルすると、完全なデバッグ情報が得られるはずですが、結果は同じです。http://llvm.org/docs/SourceLevelDebugging.htmlを認識しています。ここから、メタデータ フィールドからソース行番号を簡単に取得できることがわかります。
PS: Allocas の場合、DbgInfoPrinter.cpp の findDbgDeclare メソッドを使用する必要があるようです。
前もって感謝します !