Linux下C 專案除錯方法

2021-10-05 14:35:00 字數 2100 閱讀 5063

linux下debug工具

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

strace

是乙個用來跟蹤系統呼叫的簡易工具。它最簡單的用途就是跟蹤乙個程式整個生命週期裡所有的系統呼叫,並把呼叫引數和返回值以文字的方式輸出。strace還可以跟蹤發給程序的訊號。支援attach正在執行的程序  strace -p , 當多執行緒環境下,需要跟蹤某個執行緒的系統呼叫,可以先ps -efl|grep 查詢出該程序下的執行緒,然後呼叫starace –p 進行分析。

pstack

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

gdb經典的除錯工具,功能很強大,注意此時編譯的時候應該使用-g選項,並用-og進行優化。多執行緒下可以attach到程序來除錯。

core dump檔案

在程序收到某些訊號而終止執行時,將此時程序位址空間的內容以及有關程序狀態的其他資訊寫到core檔案中,例如我們平時的非法訪問記憶體產生segment fault錯誤,利用gdb可以檢視到到底是**發生了異常。有時候可以人為的向程序傳送訊號kill -11 ,檢視此時系統執行的狀態,例如多執行緒下程式突然停住了,此時就可能發生了死鎖,可以人為的產生訊號,再來分析core dump。

valgrind

包含很多任務具:

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

callgrind。它主要用來檢查程式中函式呼叫過程**現的問題。

cachegrind。它主要用來檢查程式中快取使用出現的問題。

helgrind。它主要用來檢查多執行緒程式**現的競爭問題。

massif。它主要用來檢查程式中堆疊使用**現的問題。

extension。可以利用core提供的功能,自己編寫特定的記憶體除錯工具。

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

tcpdump

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

stackoverflow

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

大型c++專案在linux下如何除錯?

邏輯錯誤用log,記憶體錯誤用gdb,單元測試用gtest,編譯器用clang,log框架用log4cplus,效能熱點用gprof,這樣就沒有搞不定的bug

補充一條,記憶體錯誤用valgrind,但我一直覺得習慣良好的c++**永遠不會犯記憶體錯誤

linux上除錯c++, 給大家推薦gdbgui.

大型網路專案,幾十個廠家合作,我們的方法是gdb,core檔案,tcpdump,valgrind,vim+各種正規表示式+完善的log,依靠這些工具除錯完全能hold住啊,想想這個專案用ide還是挺奇怪的啊。。還是不懂為什麼要用ide。。沒用過ide除錯大型專案,求解釋。。

1.開發機

方案一: 裝乙個xfce桌面加clion,使用vnc直接開發+除錯

方案二: 安裝remote gdb,開放除錯埠,windows上使用clion attach上去(需要自己編譯gdb,此外vscode和vs的remote debug都是殘的)

2.線上環境

直接gdb(僅限 core dump)

更多時候看的log來定位問題

打log,gdb,strace,ltrace,pstack,stap指令碼,perf

具體看除錯的程式是不是線上的服務,能不能停,看情況選擇方法

還有我大部分調的是c的,c++調的少

linux 系統核心的除錯

掌握 linux 除錯技術

linux除錯工具

linux工具快速教程

Linux下core檔案除錯方法

在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...

Linux下core檔案除錯方法

在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...

Linux下core檔案除錯方法

在程式不尋常退出時,核心會在當前工作目錄下生成乙個core檔案 是乙個記憶體映像,同時加上除錯資訊 使用gdb來檢視core檔案,可以指示出導致程式出錯的 所在檔案和行數。1.core檔案的生成開關和大小限制 1 使用ulimit c命令可檢視core檔案的生成開關。若結果為0,則表示關閉了此功能,...