我想爲gdb編寫一個腳本,這將每10毫秒節省backtrace
(堆棧)的進程。我怎樣才能做到這一點?自動化gdb:每10毫秒顯示一次回溯
它可以像電話圖表分析「無形」(對於不能使用任何類型的高級分析器的人員)。
是的,有很多先進的分析器。適用於流行的CPU和流行的操作系統。鯊魚是非常令人印象深刻和易於使用的,但我想用這種腳本獲得基本功能,使用gdb。
我想爲gdb編寫一個腳本,這將每10毫秒節省backtrace
(堆棧)的進程。我怎樣才能做到這一點?自動化gdb:每10毫秒顯示一次回溯
它可以像電話圖表分析「無形」(對於不能使用任何類型的高級分析器的人員)。
是的,有很多先進的分析器。適用於流行的CPU和流行的操作系統。鯊魚是非常令人印象深刻和易於使用的,但我想用這種腳本獲得基本功能,使用gdb。
您能否得到lsstack?也許你可以從應用程序之外的腳本運行它。爲什麼是10ms?在100ms或更長時間內,百分比大致相同。如果該應用程序速度太快,則可能會通過外部循環人爲地減慢速度,這也不會改變百分比。對於這個問題,如果應用程序運行時間足夠長,並且您的目標是找出性能問題的位置,則可以使用Ctrl-C在gdb下手動獲取樣本。
cat > gdb.run
set pagination 0
backtrace
continue
backtrace
continue
... as many more backtrace + continue's as needed
backtrace
continue
detach
quit
當然,省略了重複的換行符,你如何在這個論壇軟件中做單行換行呢? :(
gdb -x gdb.run -p $pid
然後,只需使用另一種語言的循環做
kill -INT $pid ; sleep 0.01
。
kill -INT
是OS做什麼,當你打CTRL-C。讀者做練習:使gdb腳本使用一個循環,迭代次數爲$ n。
請不要練習 – osgx 2010-06-02 16:11:46
(1)手動。在shell中執行以下操作:在s中重複按Ctrl + C地獄提示。
gdb -x print_callstack.gdb -p pid
或,(2)發送的信號爲PID重複相同次數的另一個外殼如下面循環
let count=0; \
while [ $count -le 100 ]; do \
kill -INT pid ; sleep 0.10; \
let $count=$count+1; \
done
的print_callstack.gdb
源從(1)是如下:
set pagination 0
set $count = 0
while $count < 100
backtrace
continue
set $count = $count + 1
end
detach
quit
替代方法是pstack或gstack – 2015-11-18 16:55:22
S R Bandi,你可以添加http鏈接到手冊(例如純文本)嗎? – osgx 2015-11-18 20:06:44
如果你能在平臺上使用Dtrace,你最好使用Dtrace。 – 2010-03-25 00:58:56
我沒有平臺的dtrace。我有平臺的gdb。 – osgx 2010-03-25 07:00:58