2011-06-15 28 views
0

我碰到這個迷人的文章來到(Reddit上)Visualize function calls with Graphviz可視化功能與Graphviz的要求Windows程序

它說明了一個如何使用:GNU編譯器工具鏈中,Addr2line工具,定製了膠合代碼, Graphviz爲您的函數調用創建可視化。

我真的很想在我的代碼中實現這一點,除了問題是我的代碼是基於Windows的。我正在使用Microsoft C++編譯器。

的文章解釋瞭如何使用GCC提供的分析函數的入口和出口:

void __cyg_profile_func_enter(void *func_address, void *call_site) 
           __attribute__ ((no_instrument_function)); 

void __cyg_profile_func_exit (void *func_address, void *call_site) 
           __attribute__ ((no_instrument_function)); 

是否有微軟C++編譯器提供的入口和出口任何此類分析的功能呢? 這是第一個問題。

第二個問題是,我找不到任何Addr2line utility的Windows環境。基本上它會告訴你內存地址的文件名,函數名和行號。有沒有什麼辦法可以做到Addr2line的功能?

回答

0

Visual Studio 2010 Feature Pack 2爲終極版Visual Studio的用戶內置了此功能。 (好吧,它不是基於Graphviz的,但它是一個函數調用圖)

1

您可以使用/Gh編譯器選項來掛鉤函數調用條目和/或/GH以掛鉤函數調用退出。

在MSDN上有一個很好的例子here

然後,您可以使用DIA(調試接口訪問)SDK來獲取輸入的函數的名稱。

here處有一個端到端的例子。