程式除錯和效能分析常用技巧

2021-09-20 23:36:06 字數 1620 閱讀 3598

程式除錯和效能分析常用技巧

程式除錯和效能分析通常需要設計到多種工具,有時甚至需要跨越使用者態和核心態。本文總結了在程式除錯和效能分析過程中常碰到三個問題,既是為了方便自己後面溫習,也是為了和碰到同樣問題的朋友一起分享。

1.如何除錯多執行緒的程式?

2.如何在程式執行的過程中修改某個變數的值?

gdb的attach命令能夠和正在執行的程序相關聯,而''--ex」能夠指定期望執行的gdb命令,再加上 表示遮蔽版本等資訊的-q和表示批處理—batch的引數,就組成了能在程式執行時修改變數的引數組合。比如下面的命令,就在sksmon程序執行時,動態地修改了它的mask的值:

sudo    gdb -q --batch --ex "set msk=0" attach `pidofsksmon`

3.如何檢視多執行緒程式的所有核心堆疊?

有時,我們需要檢視多執行緒的程式的所有核心態堆疊,這時我們就需要充分利用linux系統/proc檔案系統的特性,進入到/proc下對應程序相關執行緒的目錄,讀出各自的」stack」資訊。

cd /proc/`pidof yourprgoram_name`;

for i in `find ./ -name "stack"`; do echo $i >> ~/proc_search.log; cat $i >> ~/proc_search.log; done

4.如何分析程式關鍵函式的效能?

分析程式效能的工具很多,包括opprofile/systemtap等。opprofile能夠從cpu晶元和核心級別,給出系統的效能統計和分析,包括耗費cpu週期、cache命中率等;而systemtap類似於sun引入的dtrace,能夠通過符號表生成可自動載入的探測驅動,從而能夠統計系統執行時間、在指定函式插入特定函式。

針對特定業務應用的開發,一般而言,systemtap足夠勝任。

4.1 systemtap的安裝 

for fedora/centos/redhat:

yum install systemtap

yum install kernel-devel gcc make

prepare kernel debug information:

yum install yum-utils

debuginfo-install kernel

for ubuntu,do it all with apt-get:

apt-get install systemtap

apt-get install linux-headers-generic gcc make

prepare kernel debug information:

apt-get install linux-image-debug-generic

ln -s /boot/vmlinux-debug-$(uname -r) \

/lib/modules/$(uname -r)/vmlinux

4.2檢查sysstemtap是否安裝成功

執行命令 stap -v -e 'probe vfs.read '

如果輸出正常就沒有問題,否則安裝還有問題。

4.3如何編寫stap監控指令碼

和dtrace類似,systemtap執行的時候也需要stap指令碼,請參考 裡面有非常完整的介紹。示例**如下:

程式除錯方法和技巧1

除錯方法和技巧 便於除錯的 風格 1.不用全域性變數 2.所有變數都要初始化,成員變數在建構函式中初始化 3.盡量使用const 4.詳盡的注釋 vc 編譯選項 1.總是使用 w4警告級別 2.在除錯版本裡總是使用 gz編譯選項,用來發現在release版本中才有的錯誤 3.沒有警告的編譯 保證在編...

golang除錯效能分析

golang程式的cpu及記憶體使用情況效能分析 1.runtime.memstats檢視記憶體占用情況 讀取當前記憶體資訊的方法 func printmemstats func test log.println loop end.func main 主線程 睡眠等待 alloc golang語言框...

UE4效能除錯分析常用方法

本文將介紹使用ue4開發專案常用到的效能分析的命令 ue4使用命令的方式是在遊戲執行的時候按 鍵就可以輸入命令了 顯示cpu和gpu端執行耗時命令 這裡frame是幀速率,game為遊戲邏輯耗時,draw為cpu向gpu傳送命令 draw call 用時,gpu為渲染耗時,之所以幀速率不是這三項的和...