ltrace檢視庫呼叫

2021-09-06 09:08:35 字數 2060 閱讀 7289

ltrace - a library call tracer

strace - trace system calls and signals

-s  display system calls

顯示系統呼叫

-t, -tt, -ttt  print absolute timestamps

列印絕對時間戳

-t  show the time spent inside each call

輸出每個呼叫過程的時間開銷

下面是常見的幾種應用場景

1、最基本應用,不帶任何引數

[guest@localhost tmp]$ ltrace ./a.out

__libc_start_main(0x80484aa, 1, 0xbfc07744, 0x8048550, 0x8048540

printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10   no2:6   diff:4 ) = 24

printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9     no2:7   diff:2 ) = 23

printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8     no2:8   diff:0 ) = 23

--- sigfpe (floating point exception) ---

+++ killed by sigfpe +++

2、輸出呼叫時間開銷

[guest@localhost tmp]$ ltrace -t ./a.out

__libc_start_main(0x80484aa, 1, 0xbf81d394, 0x8048550, 0x8048540

printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 

no2:6   diff:4 ) = 24 <0.000972>

printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9     no2:7   diff:2 ) = 23 <0.000155>

printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8     no2:8   diff:0 ) = 23 <0.000153>

--- sigfpe (floating point exception) ---

+++ killed by sigfpe +++

3、顯示系統呼叫

[guest@localhost tmp]$ ltrace -s ./a.out

sys_brk(null)         = 0x9e20000

sys_access(0xa4710f, 4, 0xa4afc0, 0, 0xa4b644)         = 0

sys_open("/etc/ld.so.preload", 0, 02)       = 3

sys_fstat64(3, 0xbfbd7a94, 0xa4afc0, -1, 3)            = 0

sys_mmap2(0, 17, 3, 2, 3)        = 0xb7f2a000

sys_close(3)          = 0

sys_open("/lib/libcwait.so", 0, 00)         = 3

sys_read(3, "\177elf\001\001\001", 512)     = 512

sys_fstat64(3, 0xbfbd76fc, 0xa4afc0, 4, 0xa4b658)      = 0

sys_mmap2(0, 4096, 3, 34, -1)    = 0xb7f29000

sys_mmap2(0, 5544, 5, 2050, 3)              = 0x423000

sys_mmap2(0x424000, 4096, 3, 2066, 3)       = 0x424000

.............

省去若干行

原文

perf檢視函式呼叫

前一段使用perf檢視程式的熱點以及函式呼叫,一直看不到熱點函式的函式呼叫,很是奇怪,在網上問別人,別人都說沒問題,一度很是迷惑。後來又試了一下,結果就出現了,很是神奇。使用方法很簡單,就是perf record加上 g選項。另外,perf top也可以檢視程式的熱點,選項是 g。上圖一張,就是以前...

庫呼叫,系統呼叫

通過這個問題,可以判斷候選人是否具有豐富的程式設計經驗以及是否具有找出這類問題答案的敏銳感覺。簡明的回答是 函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統 的一部分。你要確保弄懂 trap 自陷 這個關鍵字的含義。系統呼叫是在作業系統核心發現乙個 trap 或中斷後進行的。函式庫呼叫 vs...

Windbg檢視呼叫堆疊 k

無論是分析程式崩潰原因,還是解決程式hang問題,我們最常檢視的就是程式呼叫堆疊。學會windbg呼叫堆疊命令,以及理解堆疊中的各個引數的意義就顯得至關重要。上圖就是乙個典型的windbg堆疊,如果不理解childebp retaddr args to child等引數意義,以及它們之間的來龍去脈,...