們知道可以使用,gprof工具來分析系統效能,但是在linux下面,多執行緒則不適用,多執行緒下,只能採集主線程效能資料。.原因是gprof採用itimer_prof訊號,在多執行緒內,只有主線程才能響應該訊號。那麼採用什麼方法,才能夠分析所有
執行緒呢? 關鍵是能夠讓各個執行緒響應itimer_prof訊號,下面是通過樁子函式來進行的,就是重寫pthread_create函式。
gprof-helper.c
#define _gnu_source
#include ;
#include ;
#include ;
#include ;
#include ;
/* original pthread function */
static int (*pthread_create_orig)(pthread_t *__restrict,
__const pthread_attr_t *__restrict,
void *(*)(void *),
void *__restrict) = null;
/* library initialization function */
void wooinit(void) __attribute__((constructor));
void wooinit(void)
fprintf(stderr, "%s\n", error);
exit(exit_failure);}}
int pthread_create(pthread_t *__restrict thread,
__const pthread_attr_t *__restrict attr,
void * (*start_routine)(void *),
void *__restrict arg)
return i_return;
}///
然後編譯成動態庫 gcc -shared -fpic gprof-helper.c -o gprof-helper.so -lpthread -ldl
使用例子:
/a.c/
#include ;
#include ;
#include ;
#include ;
#include ;
void fun1();
void fun2();
void* fun(void * argv);
int main()
printf("dsfsd\n");
return 0;
}void* fun(void * argv)
void fun1() }
void fun2() }
///gcc -pg a.c gprof-helper.so
執行程式:
./a.out
分析gmon.out:
gprof -b a.out gmon.out
gprof工具使用
gprof會精確的給出函式被呼叫的時間和次數,給出函式呼叫關係 gprof使用 1.在編譯和鏈結階段加入 pg 2.重新編譯 3.執行生成的可執行程式,在可執行程式當前目錄下生成gmon.out 4.用 gprof 工具分析 gmon.out 檔案 gprof gwcap gmon.out p p引...
gprof使用介紹
gprof實際上只是乙個用於讀取profile結果檔案的工具。gprof採用混合方法來收集程式的統計資訊,他使用檢測方法,在編譯過程中在函式入口處插入計數器用於收集每個函式的被呼叫情況和被呼叫次數 也使用取樣方法,在執行時按一定間隔去檢查程式計數器並在分析時找出程式計數器對應的函式來統計函式占用的時...
Linux下面SVN使用
linux中使用svn 1.比較單一檔案和伺服器上的不同 svn diff register.c svn co svn co 是checkout的縮寫 3.顯示日誌 svn log filename 4.新增要管理的專案 svn add filename 5.提交 svn commit m 注釋說明...