簡體   English   中英

如何找到對 C++ 符號的引用

[英]How can I find out the references to a C++ symbol

我正在研究現有的大型 C++ 代碼庫(超過 100 萬行代碼)。 我需要刪除一些被認為無用的代碼。 但是,當我只是從構建過程中排除那部分代碼(即不編譯它們)時,最終我在鏈接某些符號(類 function 名稱)時遇到了“未定義的引用”錯誤。

當我試圖找出其他代碼中有引用的位置時,出現了一個問題。 使用 Cscope 或 OpenGrok,我可以找到一些明確的引用,但在刪除這些引用后並沒有真正的幫助。 還有很多其他情況間接引用了我刪除的符號,例如:

virtual functions overridden in child class
"typedef" defined other symbol to refer to this missing symbol.

我的問題是:我是否可以打開任何 gcc/g++ 選項以使所有引用(gcc/g++ 知道)的 output 直接或間接指向我刪除的符號?

如果沒有這樣的 gcc/g++ 選項,是否有任何其他工具可以產生這樣的 output?

謝謝。

從項目中刪除編譯單元(c或cpp文件)不會完全刪除它們。 這些通常只是函數和類的定義。 這些函數和類的聲明仍然存在於標頭中,很可能仍包含在其他編譯單元中。

跟蹤聲明這些內容的位置(通常在頭文件中),並在頭文件中將它們注釋掉,或者如果項目中不需要它們,則完全停止包含頭文件。

例如:

如果要從項目中刪除foo.c ,請確保已從所有其他c / cpp文件中刪除了#include "foo.h"任何實例。

您可以使用標志-Map=path/to/my_mapfile.map和 --cref 指示 LD 發出包含交叉引用表的 linker --cref 更多信息在這里:

https://sourceware.org/binutils/docs/ld/Options.html

map 文件非常長且簡潔,但它通常具有足夠的信息來幫助您准確指出仍然引用給定符號的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM