亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

五個 Linux 下用戶空間的調試工具

2019-11-10 19:13:44
字體:
來源:轉載
供稿:網友

五個 linux 下用戶空間的調試工具

2015-3-13 10:37   評論: 12 收藏: 11 分享: 14    

根據定義,調試工具是那些那些使我們能夠監測、控制和糾正其他程序的程序。我們為什么應該用調試工具呢? 在有些情況下,運行一些程序的時候我們會被卡住,我們需要明白究竟發生了什么。 例如,我們正在運行應用程序,它產生了一些錯誤消息。要修復這些錯誤,我們應該先找出為什么產生這些錯誤的消息和這些錯誤消息從哪里產生的。 一個應用程序可能突然掛起,我們必須了解其他什么進程同時在運行。我們可能還必須弄清楚某個進程掛起的時候在做什么。為了剖析這些細節, 我們需要調試工具的幫助。

(題圖來自:axxomovies.org)

有幾個Linux下的用戶空間調試工具和技術,它們用來分析用戶空間的問題相當有用。它們是:

'查詢 (/proc, /sys 等)跟蹤 (strace/ltrace)Valgrind (memwatch)GDB

讓我們一個個地了解。

1.'print' 語句

這是一個基本的原始的調試問題的方法。 我們可以在程序中插入print語句來了解控制流和變量值。 雖然這是一個簡單的技術, 但它有一些缺點。 程序需要進行編輯以添加'print'語句,然后必須重新編譯,重新運行來獲得輸出。 如果要調試的程序相當大,這是一個耗時的方法。

2. 查詢

在某些情況下,我們需要弄清楚在一個運行在內核中的進程的狀態和內存映射。為了獲得這些信息,我們不需要在內核中插入任何代碼。 相反,可以用 /proc 文件系統。

/proc 是一個偽文件系統,系統一啟動運行就收集著運行時系統的信息 (cpu信息, 內存容量等)。

'ls /proc'的輸出

'ls /proc'的輸出

正如你看到的, 系統中運行的每一個進程在/proc文件系統中有一個以進程id命名的項。每個進程的細節信息可以在進程id對應的目錄下的文件中獲得。

'ls /proc/pid'的輸出

'ls /proc/pid'的輸出

解釋/proc文件系統內的所有條目超出了本文的范圍。一些有用的列舉如下:

/proc/cmdline -> 內核命令行/proc/cpuinfo -> 關于處理器的品牌,型號信息等/proc/filesystems -> 文件系統的內核支持的信息/proc/<pid>/cmdline -> 命令行參數傳遞到當前進程/proc/<pid>/mem -> 當前進程持有的內存/proc/<pid>/status -> 當前進程的狀態

3. 跟蹤

strace的和ltrace是兩個在Linux中用來追蹤程序的執行細節的跟蹤工具。

strace:

strace攔截和記錄系統調用及其接收的信號。對于用戶,它顯示了系統調用、傳遞給它們的參數和返回值。strace的可以附著到已在運行的進程或一個新的進程。它作為一個針對開發者和系統管理員的診斷、調試工具是很有用的。它也可以用來當做一個通過跟蹤不同的程序調用來了解系統的工具。這個工具的好處是不需要源代碼,程序也不需要重新編譯。

使用strace的基本語法是:

strace 命令

strace有各種各樣的參數。可以檢查看strace的手冊頁來獲得更多的細節。

strace的輸出非常長,我們通常不會對顯示的每一行都感興趣。我們可以用'-e expr'選項來過濾不想要的數據。

用 '-p pid' 選項來綁到運行中的進程.

用'-o'選項,命令的輸出可以被重定向到文件。

strace過濾成只有系統調用的輸出

strace過濾成只有系統調用的輸出

ltrace:

ltrace跟蹤和記錄一個進程的動態(運行時)庫的調用及其收到的信號。它也可以跟蹤一個進程所作的系統調用。它的用法是類似與strace。

ltrace command

'-i' 選項在調用庫時打印指令指針。

'-S' 選項被用來現實系統調用和庫調用

所有可用的選項請參閱ltrace手冊。

ltrace捕捉'STRCMP'庫調用的輸出

ltrace捕捉'STRCMP'庫調用的輸出

4. Valgrind

Valgrind是一套調試和分析工具。它的一個被廣泛使用的默認工具——'Memcheck'——可以攔截malloc(),new(),free()和delete()調用。換句話說,它在檢測下面這些問題非常有用:

內存泄露重釋放訪問越界使用未初始化的內存使用已經被釋放的內存等。

它直接通過可執行文件運行。

Valgrind也有一些缺點,因為它增加了內存占用,會減慢你的程序。它有時會造成誤報和漏報。它不能檢測出靜態分配的數組的訪問越界問題。

為了使用它,首先請下載并安裝在你的系統上??梢允褂?a href="http://www.49028c.com/system.asp">操作系統上的包管理器來安裝。

使用命令行安裝需要解壓縮和解包下載的文件。

tar -xjvf valgring-x.y.z.tar.bz2 (where x.y.z is the version number you are trying to install)

進入新創建的目錄(的valgrind-XYZ)內運行以下命令:

./configuremakemake install

讓我們通過一個小程序(test.c)來理解valgrind怎么工作的:

#include <stdio.h> void f(void) {int x = malloc(10 * sizeof(int)); x[10] = 0;} int main(){f();return 0;}

編譯程序:

gcc -o test -g test.c

現在我們有一個可執行文件叫做'test'。我們現在可以用valgrind來檢測內存錯誤:

valgrind –tool=memcheck –leak-check=yes test

這是valgrind呈現錯誤的輸出:

valgrind顯示堆溢出和內存泄漏的輸出

valgrind顯示堆溢出和內存泄漏的輸出

正如我們在上面看到的消息,我們正在試圖訪問函數f未分配的內存以及分配尚未釋放的內存。

5. GDB

GDB是來自自由軟件基金會的調試器。它對定位和修復代碼中的問題很有幫助。當被調試的程序運行時,它給用戶控制權去執行各種動作, 比如:

啟動程序停在指定位置停在指定的條件檢查所需信息改變程序中的數據 等。

你也可以將一個崩潰的程序coredump附著到GDB并分析故障的原因。

GDB提供很多選項來調試程序。 然而,我們將介紹一些重要的選擇,來感受如何開始使用GDB。

如果你還沒有安裝GDB,可以在這里下載:GDB官方網站。

編譯程序:

為了用GDB調試程序,必須使用gcc的'-g'選項進行編譯。這將以操作系統的本地格式產生調試信息,GDB利用這些信息來工作。

下面是一個簡單的程序(example1.c)執行被零除用來顯示GDB的用法:

#includeint divide(){int x=5, y=0;return x / y;} int main(){divide();}

展示GDB用法的例子

展示GDB用法的例子

調用 GDB:

通過在命令行中執行'gdb'來啟動gdb:

調用 gdb

調用 gdb

調用后, 它將等待終端命令并執行,直到退出。

如果一個進程已經在運行,你需要將GDB連接到它上面,可以通過指定進程ID來實現。假設程序已經崩潰,要分析問題的原因,則用GDB分析core文件。

啟動程序:

一旦你在GDB里面,使用'run'命令來啟動程序進行調試。

給程序傳參數:

使用'set args'給你的程序傳參數,當程序下次運行時將獲得該參數。'show args'將顯示傳遞給程序的參數。

檢查堆棧:

每當程序停止,任何人想明白的第一件事就是它為什么停止,以及怎么停在那里的。該信息被稱為反向跟蹤。由程序產生每個函數調用和局部變量,傳遞的參數,調用位置等信息一起存儲在堆棧內的數據塊種,被稱為一幀。我們可以使用GDB來檢查所有這些數據。 GDB從最底層的幀開始給這些幀編號。

bt: 打印整個堆棧的回溯bt 打印n個幀的回溯frame : 切換到指定的幀,并打印該幀up : 上移'n'個幀down : 下移'n'個幀 ( n默認是1)

檢查數據:

程序的數據可以在里面GDB使用'print'命令進行檢查。例如,如果'x'是調試程序內的變量,'print x'會打印x的值。

檢查list : 列出'linenum'行周圍的源碼list : 從'function'開始列出源碼disas : 顯示該函數機器代碼

停止和恢復程序:

使用GDB,我們可以在必要的地方設置斷點,觀察點等來停止程序。

break : 在'location'設置一個斷點。當在程序執行到這里時斷點將被擊中,控制權被交給用戶。watch : 當'expr'被程序寫入而且它的值發生變化時GDB將停止catch : 當'event'發生時GDB停止disable : 禁用指定斷點enable : 啟用指定斷點delete : 刪除 斷點/觀察點/捕獲點。 如果沒有傳遞參數默認操作是在所有的斷點step: 一步一步執行程序continue: 繼續執行程序,直到執行完畢

退出 GDB:

用'quit'命令還從GDB中退出。

GDB還有更多的可用選項。里面GDB使用help選項了解更多詳情。

在GDB中獲得幫助

在GDB中獲得幫助

總結

在這篇文章中,我們已經看到不同類型的Linux用戶空間的調試工具??偨Y以上所有內容,如下是什么時候使用該什么的快速指南:

基本調試,獲得關鍵變量 - print 語句獲取有關文件系統支持,可用內存,CPU,運行程序的內核狀態等信息 - 查詢 /proc 文件系統最初的問題診斷,系統調用或庫調用的相關問題,了解程序流程 – strace / ltrace應用程序內存空間的問題 – valgrind檢查應用程序運行時的行為,分析應用程序崩潰 – gdb

via: http://linoxide.com/linux-how-to/user-space-debugging-tools-linux/

作者:B N Poornima 譯者:mtunique 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕欧美精品日韩中文字幕| 日韩精品在线视频美女| 精品国产老师黑色丝袜高跟鞋| 国产一区二区三区直播精品电影| 亚洲天堂网在线观看| 国产视频精品一区二区三区| 91国偷自产一区二区三区的观看方式| 97人人爽人人喊人人模波多| 国产亚洲一区精品| 第一福利永久视频精品| 国内成人精品视频| 中文字幕亚洲欧美日韩高清| 国产精品网址在线| 亚洲免费av网址| 中文字幕日韩欧美在线视频| 亚洲精品资源在线| 51视频国产精品一区二区| 91av在线播放视频| 热久久这里只有精品| 中文字幕亚洲激情| 国产亚洲精品久久久优势| 亚洲国产高清高潮精品美女| 国产精品一区二区三区毛片淫片| 欧美日韩成人在线播放| 日本午夜在线亚洲.国产| 国产精品r级在线| 日产精品久久久一区二区福利| 久久777国产线看观看精品| 国产在线观看91精品一区| 97av在线视频| 欧美夫妻性生活视频| 日韩精品视频在线观看网址| 国产成人亚洲精品| 国产成人中文字幕| 久久久噜噜噜久久久| 国产性猛交xxxx免费看久久| 国外色69视频在线观看| 欧美二区乱c黑人| 国产免费一区视频观看免费| 欧美在线免费看| 久久精品国产亚洲一区二区| 成人精品久久av网站| 日韩最新av在线| 欧美黄色成人网| 在线播放亚洲激情| 国产精品亚洲第一区| 欧美精品videos另类日本| 国产午夜精品视频免费不卡69堂| 欧美极品少妇xxxxⅹ免费视频| 国产欧美精品日韩精品| 国产精品欧美在线| 欧美老女人xx| 日本19禁啪啪免费观看www| 国内精品久久久久久| 国产精品色午夜在线观看| 亚洲xxx大片| 国产精品欧美日韩久久| 国产精品mp4| 精品国产一区二区三区在线观看| 日韩福利视频在线观看| 成人久久一区二区三区| 欧美特黄级在线| 奇米一区二区三区四区久久| 亚洲成人网在线观看| 国产精品亚洲激情| 岛国精品视频在线播放| 法国裸体一区二区| 91国内精品久久| 91av在线免费观看视频| 亚洲国产中文字幕久久网| 国产亚洲人成a一在线v站| 欧美黄网免费在线观看| 国产精品美女久久久久久免费| 国产视频999| 在线日韩欧美视频| 国产亚洲精品美女久久久久| 成人妇女免费播放久久久| 成人免费网视频| 亚洲精品欧美日韩专区| 日韩在线视频免费观看| 国产精品一区二区久久久久| 久热精品视频在线观看| 欧美另类99xxxxx| 日本精品视频网站| 久久久精品国产| 亚洲社区在线观看| 国产精品欧美一区二区三区奶水| 欧美视频免费在线| 欧美在线激情网| 欧美日韩在线看| 久久久久五月天| www.久久草.com| 国产免费一区二区三区香蕉精| 久久香蕉国产线看观看网| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲美女av在线播放| 国产精品夜间视频香蕉| 欧美大奶子在线| 九九视频直播综合网| 亚洲永久免费观看| 国产一级揄自揄精品视频| 欧美精品18videos性欧美| 91沈先生作品| 日av在线播放中文不卡| 日韩成人网免费视频| 久久99精品久久久久久青青91| 久久免费观看视频| 最近中文字幕mv在线一区二区三区四区| 中文字幕一区日韩电影| 精品国产一区二区在线| 国产午夜精品免费一区二区三区| 96精品视频在线| 全色精品综合影院| 亚洲欧洲国产精品| 成人有码在线播放| 有码中文亚洲精品| 国产一区二区三区中文| 中文字幕视频一区二区在线有码| 欧美韩日一区二区| 亚洲男人的天堂在线播放| www.日韩不卡电影av| 午夜精品一区二区三区av| 欧美日韩黄色大片| 欧美性猛交xxxx免费看| 欧美黑人极品猛少妇色xxxxx| 亚洲视频999| 91精品国产综合久久久久久蜜臀| 欧美孕妇孕交黑巨大网站| 国内自拍欧美激情| 一区二区三区 在线观看视| 亚洲最新在线视频| 国产精品狼人色视频一区| 欧美中文字幕视频| 日本韩国欧美精品大片卡二| 欧美激情影音先锋| 亚洲精品福利视频| 国产精品激情av电影在线观看| 国产精品视频资源| 欧美日韩国产va另类| 国产精品美女呻吟| 成人中心免费视频| 激情成人中文字幕| 精品中文字幕在线2019| 欧美在线中文字幕| 亚洲成色999久久网站| 欧美日韩中文字幕在线| 日韩在线视频免费观看| 成人妇女淫片aaaa视频| 国产精品视频一区二区三区四| 色香阁99久久精品久久久| 欧美麻豆久久久久久中文| 国产欧美va欧美va香蕉在| 91网站在线免费观看| 欧美亚洲国产精品| 精品中文字幕在线| 精品久久久久久久久久国产| 久久夜色精品亚洲噜噜国产mv| 国产精品草莓在线免费观看| 91成人在线观看国产| 91在线无精精品一区二区| 久久夜色精品亚洲噜噜国产mv| www.亚洲免费视频| 久久五月天综合| 久久久久久国产精品|