gdb常用除錯命令以及多執行緒堆疊的檢視
GDB是GNU開源組織釋出的一個強大的UNIX下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像VC、BCB等IDE的除錯,但如果你是在UNIX平臺下做軟體,你會發現GDB這個除錯工具有比VC、BCB的圖形化偵錯程式更強大的功能。所謂“寸有所長,尺有所短”就是這個道理。
一般來說GDB主要除錯的是C/C++的程式。要除錯C/C++的程式,首先在編譯時,我們必須要把除錯資訊加到可執行檔案中。使用編譯器(cc/gcc/g++)的 -g 引數可以做到這一點。如:
> cc -g hello.c -o hello
> g++ -g hello.cpp -o hello
gdb +程式名 執行(gdb main)
使用 "--tui" 引數,可以在終端視窗上部顯示一個原始碼檢視窗。
gdb --tui main
list(l) 檢視最近10行原始碼
list fun 檢視fun函式原始碼
list file:fun 檢視file檔案中的fun函式原始碼
list num1 num2 檢視num1~num2行的原始碼
break 行號
break fun 在函式處設定斷點
break file:行號
break file:fun
break if <condition> 條件成立時程式停住
info break (i b)檢視斷點
watch expr 當expr的值發生改變時,程式停住
delete n 刪除斷點
run/r 啟動程式
continue(c) 執行至下一個斷點
step(s) 單步跟蹤,進入函式
next(n) 單步跟蹤,不進入函式
finish 執行程式,直到當前函式完成返回,並列印函式返回時的堆疊地址和返回值及引數資訊
until 執行程式直到程式退出迴圈體
print i (p i) 檢視變數的值
ptype 檢視變數型別
print array 檢視陣列
print *[email protected] 檢視動態記憶體
print x=5 改變執行時的資料
print &array 檢視陣列的地址
回車代表上一個命令
core檔案
在程式崩潰時,一般會生成一個檔案叫core檔案。core檔案記錄的是程式崩潰時的記憶體映像,並加入除錯資訊。core檔案生成的過程叫做core dump
設定生成core檔案
ulimit -c 檢視core-dump狀態
ulimit -c 數字
ulimit -c unlimited
gdb利用core檔案除錯
gdb 檔名 core檔案
Backtrace(bt) 檢視堆疊
多執行緒除錯
info threads 顯示當前可除錯的所有執行緒
thread ID 切換當前除錯的執行緒為指定ID的執行緒
attach process-id 在gdb狀態下,開始除錯一個正在執行的程序
thread apply all command 所有執行緒執行command
下面給大家一個好玩的多執行緒程式,答案就在某個執行緒的堆疊中,先不要看下面的答案,自己試著用gdb玩一下哈(Linux 64bit)。
http://download.csdn.net/detail/nk_test/9452236
答案在下面圖中,先不要看。。
The answer is orangutan.
相關推薦
gdb常用除錯命令以及多執行緒堆疊的檢視
GDB是GNU開源組織釋出的一個強大的UNIX下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像VC、BCB等IDE的除錯,但如果你是在UNIX平臺下做軟體,你會發現GDB這個除錯工具有比VC
GDB常用除錯命令(二)
GDB訊號處理 在GDB中使用handle命令定義一個訊號處理。訊號可以以SIG開頭或不以 SIG開頭,可以用定義一個要處理訊號的範圍(如:SIGIO-SIGKILL,表示處理從SIGIO訊號到SIGKILL的訊號,其中包括SIGIO, SIGIOT,S
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <process.h> #include <winsock2.h> #include <win
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
原文作者:aircraft 原文連結:https://www.cnblogs.com/DOMLX/p/9661012.html 先講Linux下(windows下在後面可以直接跳到後面看): 一.執行緒基本概念 前面我們講過多程序伺服器,但我們知道它開銷很大
Python爬蟲開發(三):資料儲存以及多執行緒
0×00 介紹 本文我們就兩個方面來討論如何改進我們的爬蟲:資料儲存和多執行緒,當然我承認這是為我們以後要討論的一些東西做鋪墊。 本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論
Python執行緒,以及多執行緒帶來的資料錯亂和死鎖的解決方法
摘至本人有道雲筆記《Python執行緒》 1.python多執行緒的建立 在Python中,同樣可以實現多執行緒,有兩個標準模組thread和threading,不過我們主要使用更高階的threading模組 threading模組提供的類: Thread,
執行緒以及多執行緒
標題格 1、執行緒的五種狀態1、執行緒的五種狀態 1)、新建 當new建立一個執行緒,例如new thread(r),執行緒還沒開始執行,處於新建狀態。 2)、就緒 新建的新執行緒並不會自動執行,要執行需要呼叫start()方法建立執行緒執行的系統資源,返回後,此時執行緒就處於就緒狀態。 但是
單例模式--餓漢(按需建立)、懶漢(多執行緒以及多執行緒下改進)
程式碼註釋有介紹,(排版過於難受,下次用md排完再傳上來) package singleton; /** * @author: ycz * @date: 2018/12/24 0024 22:15 * @description: 懶漢模式 */ public class SingleTon1
【轉】gcc/g++常用編譯選項和gdb常用除錯命令
gcc/g++編譯器是我們寫編譯C/C++程式時離不開的編譯工具,而gdb又是除錯C/C++程式的利器,這一篇文章我們記錄一下它們的慣常用法。 gcc/g++常用編譯選項 選項 作
C/C++函式的本質以及多執行緒函式的呼叫過程
C/C++中,函式的本質是一段可執行程式碼,程式碼包括了局部變數、全域性變數的地址等等。到組合語言的級別,變數函式等都可以視為彙編的程式碼片段。函式的本質就是一個可執行程式碼片段的集合 執行緒的詳細介紹:http://www.cnblogs.com/tracylee/archive/
從核心的角度看程序以及多執行緒
前言:就如我之前所說的一樣,程式只是一個被編譯器(包括彙編器以及聯結器)將你的抽象程式碼轉換為計算機能理解的有一定格式的二進位制檔案,它有一定格式(ELF,PE之類),就如之前的我所說的例子,就好比程式就如一段鐵軌,你是鐵路設計師,編譯器負責把鐵軌做好,那麼之後很多複雜
Linux — 淺析執行緒以及多執行緒的同步與互斥
淺析多執行緒以及多執行緒的同步與互斥 執行緒概念 什麼是執行緒? 執行緒是程序內部的一個執行分支,執行緒的建立成本小於程序.Linux下沒有
gdb常用除錯命令
注:以下內容中,圓括號表示別名,方括號表示可選引數,尖括號表示必須引數。 gdb [檔名]:進入除錯 file <檔名>:載入程式 l(list) [行號或函式名]:列出程式碼 r(run):執行程式/重新執行程式 c(continue):繼續執行 n(ne
多執行緒 以及多執行緒安全
執行緒的執行級別(IRQL) 中斷是指在CPU接到這個請求後停止手上的工作來處理我們的工作(指當出現需要時,CPU暫時停止當前程式的執行轉而執行處理新情況的程式和執行過程) 中斷優先順序是指為使系統能及時響應並處理髮生的所有中斷,系統根據引起中斷事件的重要性和緊迫程度,硬體
[Unity]AssetBundle資源更新以及多執行緒下載
前言 此文章適合不太瞭解資源載入的萌新,有了入門基礎之後再去github上搜大牛寫的專業的資源載入方案才能得心應手,不然的話會看的很吃力或者說一臉懵逼。Unity裡面關於資源載入我們都知道是下載更新AssetBundle,關於AssetBundle我之
開源網路庫boost.asio,libevent,mongoose學習記錄以及多執行緒模式的實現
目錄 IO操作: poll: 總結: 首先說明一下幾個基礎概念: IO操作: IO操作包括兩個部分: 等待資料準備好:對於一個套介面上的操作,這一步驟關係到資料從網路到達,並將其複製到核心的某個緩
java網路程式設計(一):java傳統的阻塞IO以及多執行緒解決方案
最近在看一些IO模型相關的東西,被同步IO、非同步IO、阻塞IO、非阻塞IO概念弄的有點暈,後面再慢慢學習和領悟。我們以socket IO程式設計為例子,我用的是JDK1.7.0_80,測試工具用的是
GDB 常用除錯命令
呼叫gdb編譯需要在cc後面加 -g引數再加-o; [[email protected] home]#gdb 除錯檔案:啟動gdb (gdb) l :(字母l)從第一行開始列出原始碼 (gdb) break n :在第n行處設定斷點 (gdb) brea
執行緒以及多執行緒,多程序的選擇
開發十年,就只剩下這套架構體系了! >>>
【多執行緒】檢視JVM中的執行緒名(ThreadGroup)
ThreadGroup類的常用方法activeCount()——返回此執行緒組中活動執行緒的估計數activeGroupCount()——返回此執行緒組中活動執行緒組的估計數enumerate(Thread[] list,boolean recurse)——把此執行緒組中所有