2011-02-18 80 views
3

我有一些C++寫的包。 Linux,gcc。我可以修改編譯過程(更改Makefile,標誌等),但可以不是更改C++源代碼。按名稱或簽名計數函數調用。 Gcc,C++

一個用不同的參數運行包,它執行一個工作並退出。

如何到計數
1)具有特定名稱的函數的調用次數?
2)具有特定簽名的函數的調用次數?
3)其中一個參數是特定類型的函數的調用次數,即std :: string(類型由簽名指定)?
4)和extra STL對象函數的調用次數,即std :: string拷貝構造函數?

(我指的是運行過程中計數呼叫的數量。)

我想用GDB做到這一點,但我發現它非常很難做到(1),並沒有發現該怎麼辦(2) - (4)。


所有可以接受的答案我會寫在這裏爲人類。

+2

人類讚賞它! – corsiKa 2011-02-18 02:37:57

回答

4

您可以嘗試在linux下運行DTRACE。這絕對是你正在努力完成的偉大工具。

2

你檢查了Valgrind的callgrind

如果您不使用線程(或者願意嘗試一下),gprof在某些情況下非常容易。但是,線程有一個workaround