2017-07-06 71 views
2

有什麼辦法來列表(在VS秀,寫入文件)所有呼叫者(對象,函數)函數的程序運行時?可能使用調試器?如何在運行時列出函數的所有調用?

我需要記錄所有呼叫(包括用戶)從推出方案到其終止函數

一個簡單的掃描的源代碼或二進制並不做工作因爲程序可以作爲接收請求來調用所希望的功能的服務器操作的

如果Visual Studio不提供此功能,是否有解決此問題的其他解決方案?

+0

如果您確保功能從不內聯,有可能是一個API來看看在一個點的調用堆棧,那麼你可能能夠從堆棧中找出調用者 – Justin

+0

但是如果可能的話,我不想做是手動的。 – Shiro

+0

您可以使用堆棧指針來獲取返回地址。問題是函數名稱從發佈可執行文件中刪除。 –

回答

1

VS探查器工具也會對您有所幫助,您可以選擇「CPU採樣」方法。

enter image description here

它完成後,你可以選擇 「主叫/被叫」。

enter image description here

參考:

https://docs.microsoft.com/en-us/visualstudio/profiling/caller-callee-view

更新: 我們可以出口的報告: enter image description here

+0

你可以將它們輸出到文件嗎? – Shiro

+0

@ Shiro,是的,我們可以導出報告。我編輯我的答案。 –

1

IMO,您的最佳解決方案是添加日誌記錄功能。

查找對您的功能的所有調用。在函數被調用之前,將某種信息打印到日誌文件中。這會給你一個註釋的函數調用歷史。

另一個想法是使用文檔工具,如Doxygen,它可以打印「調用者」和「被調用者」圖。但是,這不是在程序執行期間。

+0

問題出在運行時方面。這樣我就不會看到程序如何表現爲接收呼叫的服務器。 – Shiro

+0

這是真的。你可以用宏(yuck)替換函數並記錄調用者的函數名稱(它可以作爲宏使用,但我不記得是什麼) – Justin

+0

是否有一個包含調用者名字的宏? – Shiro

0

如果您的程序是一個.NET應用程序,您可以使用我的Runtime Flow工具在程序運行時查看所有函數的調用者。

相關問題