命令の行番号(および変数宣言 - allocaおよびglobal)も取得したいと考えています。命令は命令のアレイに保存されます。llvm命令の行番号
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; }
}
と(私のメインで)私が持っている:I->getMetadata("dbg")
がfalseであるため、
errs()<<"\nLine number is "<<*metadata::getLineNumber(allocas[p]);
結果はNULLである私が機能を持っています。
ターゲットプログラムをコンパイルするときやパスを実行するとき(I used -debug)にフラグを使用するなど、LLVMフレームワークを再構築せずにLLVMでdbgフラグを有効にする可能性はありますか?
"-O3 -g"でプログラムをコンパイルすると完全なデバッグ情報が得られますが、同じ結果が得られます。私はhttp://llvm.org/docs/SourceLevelDebugging.htmlを知っています。そこから、メタデータフィールドからソース行番号を取得するのは簡単です。
PS:Allocasの場合、DbgInfoPrinter.cppのfindDbgDeclareメソッドを使用する必要があるようです。
ありがとうございます!
llvm passesから命令の行番号を変更することはできますか? – user