2009-09-22 43 views
4

是否有可以設置的標誌,以便編譯器(鏈接器?)將輸出所有函數的列表(由調用)(不僅定義在)每個單獨的源文件在編譯(鏈接)過程中?輸出源文件調用的函數列表

感謝,

回答

3

我不知道是否VS能做到這一點,但您可以使用doxygen生成每個函數調用關係圖。

+1

+1 Doxygen是一個很好的工具。 – luke 2009-09-23 16:53:37

2

你可以嘗試CppDepends與其他一些有用的信息

0

一起生成項目的依賴地圖,也可以使用不同的編輯器。例如,SourceInsight在編輯器中實時製作調用/調用圖表的功能非常出色。

對於編程輸出:我發現oing C code unit testing on a shoestring非常有趣。對於Visual Studio,它需要一些手動工作,因爲Visual Studio的C99兼容性差。

外部工具(就像doxygen和CppDepends)是非常有用的,只要你可以用2 constrainst生活:

  • 不僅調用的依賴,而且還依賴關係上,即全局變量跟蹤
  • 依賴在靜態

對於靜態依賴,請看下面的例子:

void foo(boolean b) 
{ 
    if (false == b) 
    { bar1(); } 
    else 
    { bar2(); } 
} 

靜態工具將輸出bar1和bar2。 運行時調用圖將顯示bar1或bar2,具體取決於參數的值。

1

將其編譯到目標文件中,並獲取其中未定義外部符號的列表。您可以使用適用於您平臺的適當工具自動獲取列表:在Linux中,它是readelf

+0

有趣的方法,但不是很自動化。 – Bill 2009-09-22 11:59:48

+0

@Bill,它怎麼沒有自動化?同樣,在談到linux時,您可以運行編譯器(從您的應用程序構建腳本中),然後運行一個'readelf'程序,將該目標文件作爲輸入;它只需要一些後處理就可以在主題中打印信息。這相當自動化。您也可以在自己的平臺上找到自動化的方式。只有一些平臺不是爲自動化而創建的,所以它們更難;-) – 2009-09-22 17:53:36

+0

這聽起來更自動化了,是的。 「研究未定義的外部符號」聽起來很漂亮。 – Bill 2009-09-23 16:37:26

1

對於單個功能,右鍵單擊並選擇呼叫瀏覽器 - >顯示呼叫圖。

如果你從main()這樣做,你會得到main()線程的調用樹。您必須在每個線程的入口點執行此操作才能獲得多線程應用程序的完整視圖。它當然不能處理通過指針調用的函數。