有沒有什麼辦法可以通過clang::FileID
或clang::FileEntry
得到 #include
什麼?如何使用clang libtooling獲得#includes的源碼位置?
1
A
回答
2
如何使用以fileid爲參數的源代碼管理器的GetIncludedLoc函數呢?
SourceManager.GetIncludedLoc(FILEID)
0
感謝的@Hemant的回答,你說得對
我已經發現,通過我自己(在鐺3.8它被稱爲getIncludeLoc
) 卻忘了寫在這裏。 我用它來找到所有#includes之後我可以放置自己的位置。 這裏的功能(可以肯定不是最好的方式),我寫了這個,希望它可以幫助別人
SourceLocation getIncludeLocation(FileID fileID, SourceManager &sm, unsigned carriages) {
return SourceLocation();
set<unsigned> lines;
if (fileID.isInvalid())
for (auto it = sm.fileinfo_begin(); it != sm.fileinfo_end(); it++) {
SourceLocation includeLoc = sm.getIncludeLoc(sm.translateFile(it->first));
if (includeLoc.isValid() && sm.isInFileID(includeLoc, fileID)) {
lines.insert(sm.getSpellingLineNumber(includeLoc));
}
}
unsigned pos(0);
if (!lines.empty()) {
bool first = true;
for (unsigned line :lines) {
if (first)
first = false;
else if ((line - pos) > carriages)
break;
pos = line;
//cout << "Include line:" << pos << endl;
}
//cout << console_hline('-') << endl;
}
cout << sm.getFileEntryForID(fileID)->getName() << endl;
return sm.translateFileLineCol(sm.getFileEntryForID(fileID), ++pos, 1);
}
也有一些相關信息包括可以通過
Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer)
和
Lexer::ComputePreamble(StringRef Buffer, const LangOptions &LangOpts, unsigned MaxLines = 0)
可以得到
相關問題
- 1. 如何獲取Clang LibTooling中的聲明名稱?
- 2. 如何在Clang和LibTooling中使用標準庫
- 3. clang libTooling:如何找到一個AST項目出來的頭?
- 4. Clang使用LibTooling重寫器來生成新文件?
- 5. 使用Clang獲取AST
- 6. 如何使Visual Studio在獲得後請求源路徑:「沒有可用於當前位置的源代碼。」
- 7. clang:如何獲得源代碼信息,同時在OS X中分析
- 8. 這個代碼如何獲得最低位的位置?
- 9. 如何使用Clang的AST?
- 10. 如何使用preg_match_all獲得職位的
- 11. 如何使用.net獲取Windows資源管理器的位置?
- 12. 如何獲得在使用JQuery的表中的位置?
- 13. 如何使用,以獲得在列表中的位置的Android
- 14. 如何獲得div的位置? jquery
- 15. 如何獲得longpress中的touchesEnded位置?
- 16. 如何獲得Mootools中div的位置?
- 17. 如何獲得FrameworkElement的真實位置?
- 18. 如何獲得的父目錄位置
- 19. 如何獲得RecyclerView.Adapter中的卡位置?
- 20. 如何獲得更準確的位置?
- 21. 如何獲得Android的GPS位置
- 22. 地理編碼 - 獲得位置
- 23. 如何在資源位置使用setOnClickListener?
- 24. 如何使用四角位置獲得3d平面的角度
- 25. 如何獲得使用LAC的位置名稱
- 26. CLLocationManger給出了舊的位置。如何獲得新的位置?
- 27. 使用jQuery獲得div的絕對或相對位置位置
- 28. 如何使用.pch和clang?
- 29. 鏘3.8 C++ - 使用LibTooling
- 30. 如何在執行頭後獲取HTML源代碼(位置:URL)
謝謝,@Yuriy瞭解更多信息。 – Hemant