मैं एक निर्देश की लाइन संख्या (और एक परिवर्तनीय घोषणा - alloca और वैश्विक) भी प्राप्त करना चाहता हूं। निर्देश निर्देशों की एक सरणी में सहेजा गया है।एक निर्देश की 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; }
}
और अपने मुख्य में() मेरे पास है:
errs()<<"\nLine number is "<<*metadata::getLineNumber(allocas[p]);
परिणाम शून्य है, क्योंकि I->getMetadata("dbg")
गलत है मैं समारोह है।
क्या एलएलवीएम फ्रेमवर्क को पुनर्निर्माण किए बिना एलएलवीएम में डीबीजी झंडे को सक्षम करने की संभावना है, जैसे लक्ष्य प्रोग्राम को संकलित करते समय या मेरे पास (मैंने उपयोग किया -debug) चलाते समय ध्वज का उपयोग करना?
"-O3 -g" के साथ एक प्रोग्राम को संकलित करना पूर्ण डीबग जानकारी देना चाहिए, लेकिन मेरे पास अभी भी एक ही परिणाम है। मुझे http://llvm.org/docs/SourceLevelDebugging.html से अवगत है, जहां से मैं देख सकता हूं कि मेटाडेटा फ़ील्ड से स्रोत लाइन नंबर लेना काफी आसान है।
पीएस: एलोकास के लिए, ऐसा लगता है कि मुझे DbgInfoPrinter.cpp से findDbgDeclare विधि का उपयोग करना है।
अग्रिम धन्यवाद!
क्या एलएलवीएम पास से निर्देश की लाइन संख्या को संशोधित करना संभव है? – user