產生C 程式碼呼叫圖
本文探討了為C 程式碼建立呼叫圖的技術,特別是在嘗試辨識所有C 程式碼呼叫圖時導致特定函數的可能執行路徑。
建立呼叫圖
為了滿足這項需求,一種方法是利用 LLVM 最佳化管道。這可以透過使用 -S 和 -emit-llvm 標誌編譯程式碼,然後透過 opt 工具使用 -analyze 和 -dot-callgraph 選項來實現。例如:
$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -dot-callgraph $ dot -Tpng -ocallgraph.png callgraph.dot
此指令產生一個表示潛在執行路徑的呼叫圖,以視覺化圖表的形式進行描述。
自訂呼叫圖表示
在某些情況下,對呼叫圖進行後處理以增強可讀性可能會有好處。一種方法是使用 c filt 來取得未損壞的函數和類別名稱。以下範例示範了此過程:
$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -std-link-opts -dot-callgraph $ cat callgraph.dot | c++filt | sed 's,>,\>,g; s,-\>,->,g; s,<,\<,g' | gawk '/external node/{id=} != id' | dot -Tpng -ocallgraph.png
透過應用此修改後的圖,可以更輕鬆地識別每個路徑中涉及的特定函數和類別。
以上是如何產生C程式碼呼叫圖來分析執行路徑?的詳細內容。更多資訊請關注PHP中文網其他相關文章!