linux程序調試命令strace

strace命令用法詳解:

strace常用來跟蹤進程執行時的系統調用和所接收的信號。 在Linux世界,進程不能直接訪問硬件設備,當進程需要訪問硬件設備(比如讀取磁盤文件,接收網絡數據等等)時,必須由用戶態模式切換至內核態模式,通過系統調用訪問硬件設備。strace可以跟蹤到一個進程產生的系統調用,包括參數,返回值,執行消耗的時間。

strace常用參數:

-p	跟蹤指定的進程
-f	跟蹤由fork子進程系統調用
-F	嘗試跟蹤vfork子進程系統調吸入,與-f同時出現時, vfork不被跟蹤
-o      filename 默認strace將結果輸出到stdout。通過-o可以將輸出寫入到filename文件中
-ff	常與-o選項一起使用,不同進程(子進程)產生的系統調用輸出到filename.PID文件
-r	打印每一個系統調用的相對時間
-t	在輸出中的每一行前加上時間信息。 -tt 時間確定到微秒級。還可以使用-ttt打印相對時間
-v	輸出所有系統調用。默認情況下,一些頻繁調用的系統調用不會輸出
-s	指定每一行輸出字符串的長度,默認是32。文件名一直全部輸出
-c	統計每種系統調用所執行的時間,調用次數,出錯次數。
-e	expr	輸出過濾器,通過表達式,可以過濾出掉你不想要輸出

命令實例:

[root@tomcat02 ~]# strace cat /dev/null 
execve("/bin/cat", ["cat", "/dev/null"], [/* 26 vars */]) = 0
brk(0)                                  = 0x24ef000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8443faf000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=70314, ...}) = 0
mmap(NULL, 70314, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b8443fb0000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY)      = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\355A\2428\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1979000, ...}) = 0
mmap(0x38a2400000, 3803304, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x38a2400000
mprotect(0x38a2597000, 2097152, PROT_NONE) = 0
mmap(0x38a2797000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x197000) = 0x38a2797000
mmap(0x38a279c000, 18600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x38a279c000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8443fc2000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8443fc3000
arch_prctl(ARCH_SET_FS, 0x2b8443fc2b20) = 0
mprotect(0x38a2797000, 16384, PROT_READ) = 0
mprotect(0x38a1e1f000, 4096, PROT_READ) = 0
munmap(0x2b8443fb0000, 70314)           = 0
brk(0)                                  = 0x24ef000
brk(0x2510000)                          = 0x2510000
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=99158704, ...}) = 0
mmap(NULL, 99158704, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b8443fc4000
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
open("/dev/null", O_RDONLY)             = 3
fstat(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
read(3, "", 32768)                      = 0
close(3)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?

每一行都是一條系統調用,等號左邊是系統調用的函數名及其參數,右邊是該調用的返回值。
strace 顯示這些調用的參數并返回符號形式的值。strace 從內核接收信息,而且不需要以任何特殊的方式來構建內核。  

通用的完整用法:

strace -o output.txt -T -tt -e trace=all -p 28979

上面的含義是 跟蹤28979進程的所有系統調用(-e trace=all),并統計系統調用的花費時間,以及開始時間(并以可視化的時分秒格式顯示),最后將記錄結果存在output.txt文件里面。

2.在umount掛載目錄時,直接卡住了,最后用 strace df -Th分析后結果掛載出問題了

strace df -Th

3.用strace跟蹤 whoami的輸出:

strace -o whoami-strace.txt whoami

  

參考文檔:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html

轉載于:https://www.cnblogs.com/saneri/p/5466519.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287864.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287864.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287864.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Tomcat相關 -- 內存設置

java內存溢出詳解 一、常見的java內存溢出 1、java.lang.OutOfMemmoryError : Java heap space -- JVM Heap (jvm 堆溢出) JVM啟動時自動設置JVM Heap的值,其初始空間(即 -Xms)是物理內存的1/64,最大空間(-Xms)不可超過物理內存。…

CoreWCF 1.0 正式發布,支持 .NET Core 和 .NET 5+ 的 WCF

CoreWCF 項目組正式發布 1.0 版本的 CoreWCF, 這是面向 .NET Core 平臺的 WCF 移植版本。它支持 SOAP、NetTCP 和 WSDL 的相同實現。在代碼中的使用方式于 WCF 相同,但是升級到使用 ASP.NET Core 作為服務宿主,并工作在 .NET Core 平臺上。這是該項目的第…

【經典回放】多種語言系列數據結構算法:快速排序

快速排序(Quicksort)是對冒泡排序的一種改進。 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過…

表頭合并_多個Excel表格合并數據麻煩?試試Power Query輕松幫你解決

Hi!大家好!歡迎來到小龍自修室!又到了小龍分享時間!(今天的內容有點多,希望各位看官一定要看到最后!有驚喜)上一篇文字小龍和大家一起制作了一個限定數據內容錄入的電子表格,我的表格我做主!表格…

C++入門指南及實戰 第三步 基本變量

在C編程中,內置了一些基本數據類型用來存儲一些不同類型的值。有字符類型 char 用以存儲字符,如a、b、c、d、-、、1、2、4、3、>、?等;有整形 int 用以存儲整數類型,如1、2、3、4、5、11、111、2311等;有浮點類型 …

OPCServer Modbus使用和配置

一,安裝KEPware.Enhanced.OPC.DDE.KEPServer。(PLC數據傳送給KEPServer,開發的程序用OPCServer讀KEPServer) 設置ip地址后面是指的plc站號,此處必須和plc上站號對應。否則無法接收數據。 打開quick client 查看傳值情況 二.C#程序代碼 引用opcdaauto.dll…

C# 創建命名管道服務器

通過創建 NamedPipeServerStream 的一個新實例,來創建服務器。NamedPipeServerStream 派生自基類 PipeStream,PipeStream 派生自 Stream 基類,因此可以使用流的所有功能,例如,可以創建CryptoStream 或 GZipStream&…

在香蕉派 Banana Pi BPI-M1上使用 開源 OxOffice Impress

2019獨角獸企業重金招聘Python工程師標準>>> 在香蕉派 Banana Pi BPI-M1上使用 開源 OxOffice Impress 在Banana Pi BPI-M1上使用OxOffice Impress,該簡報大小約26MB,採用自動播放機制。 OxOffice提供 arm linux的版本,可佈署在ar…

免殺新姿勢:利用線程將惡意代碼注入到內存中

本文講的是免殺新姿勢:利用線程將惡意代碼注入到內存中,產生存放遠程攻擊線程的進程在這篇文章中我不想一步一步解釋我編寫的C#代碼,但是我會展示下它能夠繞過殺毒軟件,并且操作非常簡單,而且實用。 首先說明一下&…

【經典回放】多種語言系列數據結構算法:希爾排序

【希爾排序原理】每隔sp(整數)個數即取數并判斷大小,交換,先構造局部有序序列,直到sp為1,構造完整的有序序列。 給出一組數據,如下: 0 1 2 3

Java之解決散列表的沖突用開放定址法和鏈表法

1 問題 理想狀態下,散列表就是一個包含關鍵字的固定大小的數組,通過使用散列函數,將關鍵字映射到數組的不同位置,哈希函數可以將關鍵字均勻的分散到數組的不同位置,不會出現兩個關鍵字散列值相同(假設關鍵…

python 手把手教你基于搜索引擎實現文章查重

前言 文章抄襲在互聯網中普遍存在,很多博主都收受其煩。近幾年隨著互聯網的發展,抄襲等不道德行為在互聯網上愈演愈烈,甚至復制、黏貼后發布標原創屢見不鮮,部分抄襲后的文章甚至標記了一些聯系方式從而使讀者獲取源碼等資料。這…

lru算法實現 redis_使用數組與雙向鏈表實現一個簡單的LRU算法

什么是LRU算法?redis大家都玩過吧,你們好奇redis內存數據存滿之后會發生什么嗎?拋出異常?禁止使用?還是刪除數據?其實redis設計了一種內潤淘汰機制。noeviction(默認策略):屏蔽寫操作&#xff0…

【經典回放】多種語言系列數據結構算法:歸并排序

目錄 干貨1:C#語言實現歸并排序! 干貨2:C語言實現歸并排序! 干貨1:C#語言實現歸并排序! 一、算法 1、思想基礎

Java對象和類

轉自原文:http://www.yiibai.com/java/java_object_classes.html java是一種面向對象的語言。由于具有面向對象特性的語言,Java支持以下基本概念: 多態性繼承封裝抽象化類對象實例方法消息解析在本章中,我們將探討類和對象這些概念…

bzoj3224 Tyvj 1728 普通平衡樹題解--Treap

題面: Description您需要寫一種數據結構(可參考題目標題),來維護一些數,其中需要提供以下操作: 1. 插入x數 2. 刪除x數(若有多個相同的數,因只刪除一個) 3. 查詢x數的排名(若有多個相同的數&…

Blazor University (18)使用 RenderFragments 模板化組件 —— 創建 TabControl

原文鏈接:https://blazor-university.com/templating-components-with-renderfragements/creating-a-tabcontrol/創建一個 TabControl 組件源代碼[1]接下來我們將創建一個 TabControl 組件。這將教您如何實現以下目標:將數據傳遞到 RenderFragment 以為其…

Java之GC機制

1 JVM基本結構 1)類加載器classLoader:在JVM啟動時或者類運行時將需要的.class文件加載到內存中 2)內存區域(運行時數據區): 是在JVM運行的時候操作所分配的內存區 3)執行引擎:負…

ArcGIS實驗教程——實驗十八:疊置分析(Overlay Analysis)

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據) 目 錄 一、實驗描述 二、實驗內容 三、實驗目的 四、實驗數據

《零基礎看得懂的C語言入門教程 》——(一)脫離學習誤區

本節視頻連接: https://www.bilibili.com/video/BV1Qv411t7ae 新手C語言學習有些誤區你應該知道,這樣學習起來事半功倍~一、前言 距離上一次編寫C語言的教程是5年前了(2015年),由于自己是從初一時開始學習編程&#…