2015-12-15 19 views
2

是否可以使用valgrind獲取有關程序運行指令配置文件的信息。按指令配置文件,我的意思是分解爲每種類型指令的指令數量。例如:'n1'MOV,'n2'CALL等。如果沒有其他工具可以做到這一點?使用Valgrind獲取指令配置文件

回答

2

我覺得,valgrind沒有這個任務的準備工具。您可以嘗試編寫一些腳本來獲取此類信息,或者使用GUI手動獲取基本數據。

callgrind工具Valgrind的個人資料的程序執行:

valgrind --tool=callgrind [callgrind-options] ./your-program 

(檢查http://valgrind.org/docs/manual/cl-manual.html

有了它,你可以得到每條指令的執行次數(Ir事件)和總的準確數據簡介執行指令的數量,但不會有關於n1 MOVs,n2 CALLs等的彙總信息。

使用--dump-instr=yes callgrind選項將會有精確的e數據每條機器指令的執行次數;這個數據可以在「彙編器」選項卡中用kcachegrind GUI查看。不知道callgrind_annotate是否會解析這樣的文件並顯示帶註釋的反彙編,但是可以通過一些perl/python腳本解析callgrind.out.$pid callgrind的輸出(該文件是基於文本的 - http://valgrind.org/docs/manual/cl-format.html - 將會有十六進制地址和偏移量根據「 3.1.6。分層壓縮「)。您將得到每個地址的機器指令和執行計數的地址,因此腳本可能會將計數與反彙編結合起來。 (其他方法是切換到perfoprofile等不精確的分析器,以獲得與文本相同的帶註釋的反彙編,並通過自定義腳本進行解析。結果將與valgrind不完全一樣,但更容易獲得計數以文本形式)

PS命令​​:我覺得寫劇本比增加幾個櫃檯每個指令類型黑客的valgrind的插件(callgrind)更容易。這仍然是可能的,但是更困難,並且會比原來的callgrind多幾倍。