ltrace
用來跟蹤進程調用庫函數的情況
補充說明
ltrace命令 是用來跟蹤進程調用庫函數的情況。
語法
1ltrace [option ...] [command [arg ...]]
選項
1-a 對齊具體某個列的返回值。
2-c 計算時間和調用,並在程序退出時打印摘要。
3-C 解碼低級別名稱(內核級)爲用戶級名稱。
4-d 打印調試信息。
5-e 改變跟蹤的事件。
6-f 跟蹤子進程。
7-h 打印幫助信息。
8-i 打印指令指針,當庫調用時。
9-l 只打印某個庫中的調用。
10-L 不打印庫調用。
11-n, --indent=NR 對每個調用級別嵌套以NR個空格進行縮進輸出。
12-o, --output=file 把輸出定向到文件。
13-p PID 附着在值爲PID的進程號上進行ltrace。
14-r 打印相對時間戳。
15-s STRLEN 設置打印的字符串最大長度。
16-S 顯示系統調用。
17-t, -tt, -ttt 打印絕對時間戳。
18-T 輸出每個調用過程的時間開銷。
19-u USERNAME 使用某個用戶id或組ID來運行命令。
20-V, --version 打印版本信息,然後退出。
21-x NAME treat the global NAME like a library subroutine.(求翻譯)
實例
最基本應用,不帶任何參數:
1[guest@localhost tmp]$ ltrace ./a.out
2__libc_start_main(0x80484aa, 1, 0xbfc07744, 0x8048550, 0x8048540 <unfinished ...>
3printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24
4printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9 no2:7 diff:2 ) = 23
5printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23
6--- SIGFPE (Floating point exception) ---
7+++ killed by SIGFPE +++
輸出調用時間開銷:
1[guest@localhost tmp]$ ltrace -T ./a.out
2__libc_start_main(0x80484aa, 1, 0xbf81d394, 0x8048550, 0x8048540 <unfinished ...>
3printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24 <0.000972>
4printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9 no2:7 diff:2 ) = 23 <0.000155>
5printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23 <0.000153>
6--- SIGFPE (Floating point exception) ---
7+++ killed by SIGFPE +++
顯示系統調用:
1[guest@localhost tmp]$ ltrace -S ./a.out
2SYS_brk(NULL) = 0x9e20000
3SYS_access(0xa4710f, 4, 0xa4afc0, 0, 0xa4b644) = 0
4SYS_open("/etc/ld.so.preload", 0, 02) = 3
5SYS_fstat64(3, 0xbfbd7a94, 0xa4afc0, -1, 3) = 0
6SYS_mmap2(0, 17, 3, 2, 3) = 0xb7f2a000
7SYS_close(3) = 0
8SYS_open("/lib/libcwait.so", 0, 00) = 3
9SYS_read(3, "\177ELF\001\001\001", 512) = 512
10SYS_fstat64(3, 0xbfbd76fc, 0xa4afc0, 4, 0xa4b658) = 0
11SYS_mmap2(0, 4096, 3, 34, -1) = 0xb7f29000
12SYS_mmap2(0, 5544, 5, 2050, 3) = 0x423000
13SYS_mmap2(0x424000, 4096, 3, 2066, 3) = 0x424000
14.............省去若干行
來源:https://github.com/jaywcjlove/linux-command
最後修改於: Wednesday, January 31, 2024
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。