首頁 >後端開發 >C++ >如何產生C程式碼呼叫圖來分析執行路徑?

如何產生C程式碼呼叫圖來分析執行路徑?

Susan Sarandon
Susan Sarandon原創
2024-11-16 18:35:03815瀏覽

How to Generate a Call Graph for C   Code to Analyze Execution Paths?

產生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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn