linux下debug工具,linuxdebug工具

來源:互聯網
上載者:User

linux下debug工具,linuxdebug工具

在linux下開發難免會遇到bug,但是由於沒有圖形IDE,導致debug也變得困難,其實只要掌握一些常用的debug工具,一些錯誤就能很快解決,本文就介紹一些常用的工具用以調試:

log

輸出log永遠是最簡單快捷的調試方式,可以快速定位bug,通過設定記錄層級控制日誌的輸出詳略程度,結合一些文本分析工具awk/sed/grep可以快速在大量日誌中找到錯誤資訊。

strace

是一個用來跟蹤系統調用的簡易工具。它最簡單的用途就是跟蹤一個程式整個生命週期裡所有的系統調用,並把調用參數和傳回值以文本的方式輸出。Strace還可以跟蹤發給進程的訊號。支援attach正在啟動並執行進程  strace -p <pid>, 當多線程環境下,需要跟蹤某個線程的系統調用,可以先ps -efL|grep <Process Name> 尋找出該進程下的線程,然後調用starace –p <pid>進行分析。

pstack

用來跟蹤進程棧,比如我們發現一個服務一直處於work狀態(如假死狀態,好似死迴圈),使用這個命令就能輕鬆定位問題所在;可以在一段時間內,多執行幾次pstack,若發現代碼棧總是停在同一個位置,那個位置就需要重點關注,很可能就是出問題的地方;

gdb

經典的調試工具,功能很強大,注意此時編譯的時候應該使用-g選項,並用-Og進行最佳化。多線程下可以attach到進程來調試。

core dump檔案

在進程收到某些訊號而終止運行時,將此時進程地址空間的內容以及有關進程狀態的其他資訊寫到core檔案中,例如我們平時的非法訪問記憶體產生segment fault錯誤,利用gdb可以查看到到底是哪裡發生了異常。有時候可以人為的向進程發送訊號kill -11 <pid>,查看此時系統啟動並執行狀態,例如多線程下程式突然停住了,此時就可能發生了死結,可以人為的產生訊號,再來分析core dump。

valgrind

包含很多工具:

Memcheck。這是valgrind應用最廣泛的工具,一個重量級的記憶體檢查器,能夠發現開發中絕大多數記憶體錯誤使用方式,比如:使用未初始化的記憶體,使用已經釋放了的記憶體,記憶體訪問越界等。這也是本文將重點介紹的部分。

Callgrind。它主要用來檢查程式中函數調用過程中出現的問題。

Cachegrind。它主要用來檢查程式中緩衝使用出現的問題。

Helgrind。它主要用來檢查多線程程式中出現的競爭問題。

Massif。它主要用來檢查程式中堆棧使用中出現的問題。

Extension。可以利用core提供的功能,自己編寫特定的記憶體調試工具。

預設使用的就是memcheck工具,在c++中指標的使用,一不留神就會產生異常,就可以利用memcheck進行檢查。個人一般用--track-origins=yes來定位未初始設定變數的位置。

tcpdump

抓包用的,在開發網路應用的時候很給力,結合awk/sed/grep可以快速尋找網路資料包。

stackoverflow

這個網站是個程式設計領域的問答網站,基本碰到的問題都能在這裡面找到答案! 技術氛圍很強,從中能學到很多東西。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.