久综合色-久综合网-玖草影视-玖草资源在线-亚洲黄色片子-亚洲黄色片在线观看

Hello! 歡迎來到小浪云!


深入了解Linux —— 調試程序


前言

然而,在編寫代碼時遇到錯誤卻不知道錯誤所在位置是常見的情況。在Windows下,我們可以通過調試來查找并修改代碼錯誤的位置;但在Linux下,我們只能查看源代碼,直接查找錯誤,這非常麻煩。

現在,讓我們學習如何在Linux下調試程序。

調試程序——gdb/cgdb及Debug/Release模式在學習c語言時,我們聽說過Debug和Release模式,只知道Debug模式是用于調試的,程序員編寫代碼的版本;而Release模式是發布版本。

現在讓我們看看這兩個模式的區別。

首先,Debug模式會生成程序的調試信息,而Release模式不會生成這些信息。因此,Debug模式的程序比Release模式的程序文件大小要大。

我們如何驗證這一點呢?

Linux中,gcc編譯默認生成的是Release版本。我們要生成Debug模式的程序,就需要使用-g選項。

假設我們有這樣一段代碼,存放在test.c文件中:

#include<stdio.h> int func(int n){     int ret = 0;     for (int i = 1; i <= n; i++) {         ret += i;     }     return ret; } int main(){     int n = 10;     int result = func(n);     printf("The sum is %dn", result);     return 0; }

在Linux下進行編譯時,可能會遇到這樣的提示,因為C98標準不支持在for循環中定義變量,需要使用C99標準:

深入了解Linux —— 調試程序

因此,我們需要這樣編譯:

gcc test.c -o test -std=c99

為了方便操作,我們可以將其寫成makefile。

這樣生成的是Release模式的程序,我們查看其文件屬性:

深入了解Linux —— 調試程序

現在,我們使用-g選項生成Debug模式的程序:

深入了解Linux —— 調試程序

可以看到,Debug模式的程序比Release模式的程序要大一些。

gdb/cgdb的使用只有Debug模式的程序才能被調試;Release模式下的程序因為缺少調試信息而無法被調試。

在使用之前,可能需要進行安裝:

yum install -y gdb yum install -y cgdb
  1. 進入調試:
gdb 可執行程序

無論是gdb還是cgdb,都是對可執行程序進行調試。

深入了解Linux —— 調試程序

可以看到,這樣就進入了gdb調試模式,但目前看不到我們的源代碼。

  1. 退出調試:
quit

深入了解Linux —— 調試程序

現在來看一下cgdb調試的界面:

cgdb test

深入了解Linux —— 調試程序

這樣的界面看起來比gdb更易用,所以我們以cgdb為例來學習調試。

退出調試仍然是quit。

  1. 查看代碼:

使用l命令查看代碼,可以不帶參數,也可以帶行號或函數名。

  • l:查看源代碼,從上次位置開始,依次顯示10行代碼。
  • l 文件名:行號:列出指定文件的源代碼。
  • l 函數名:列出指定函數的源代碼。

深入了解Linux —— 調試程序

深入了解Linux —— 調試程序

深入了解Linux —— 調試程序

這里列出的可能有一些差別。

  1. 運行代碼:

我們進入調試,但代碼并沒有運行起來。在Windows下,我們直接按F5就可以讓代碼運行起來;而在cgdb中,使用r命令可以讓代碼運行起來。

  • r/run,執行代碼:

深入了解Linux —— 調試程序

逐步執行:

  • n/next,相當于F10,一行一行執行代碼,在遇到函數時,不進入函數內部;
  • s/step,相當于F11,一行一行執行代碼,在遇到函數時,進入函數內部。

執行到某處:

深入了解Linux —— 調試程序

  • r 重新執行:

深入了解Linux —— 調試程序

  • finish:

深入了解Linux —— 調試程序

  • until 執行到某一行:

深入了解Linux —— 調試程序

現在執行until 11,讓程序執行到第11行。

深入了解Linux —— 調試程序

  1. 斷點增加/刪除:

在Windows下,我們通過快捷鍵F9或鼠標點擊來設置和取消斷點;在cgdb中,我們通過b/break命令來設置斷點,通過delete/d命令來取消斷點。

  • b設置斷點:
    • b 行號:在指定行設置斷點。
    • b 函數名:在函數開頭設置斷點。

深入了解Linux —— 調試程序

  • info b查看所有斷點信息:

深入了解Linux —— 調試程序

  • d刪除斷點:

深入了解Linux —— 調試程序

這意味著現在存在兩個斷點,我們刪除了其中一個,然后再次創建了一個斷點,它的編號是3而不是2。

深入了解Linux —— 調試程序

深入了解Linux —— 調試程序

啟用/禁用斷點:

你可能會問,為什么不直接刪除呢?

  • 啟用斷點:
enable 斷點編號
  • 禁用斷點:
disable 斷點編號

斷點默認是啟用狀態的。

深入了解Linux —— 調試程序

現在執行一下,看是否真的禁用了:

深入了解Linux —— 調試程序

  1. 監視:

在Windows下,我們通過監視窗口來查看變量的值;而在Linux的cgdb中,我們可以通過指令來查看變量的值。

  • 監視變量p:

深入了解Linux —— 調試程序

深入了解Linux —— 調試程序

如上圖所示,每次執行代碼時,變量的值都會顯示出來。

深入了解Linux —— 調試程序

可以看到func中所有的局部變量都顯示出來了。

  • 查看當前函數調用幀:

深入了解Linux —— 調試程序

cgdb常用小技巧:

  1. watch:

深入了解Linux —— 調試程序

我們使用info b查看斷點時也可以看到watch監視的變量。

  1. set var

深入了解Linux —— 調試程序

在調試過程中,使用set var可以修改變量的值。

  1. 條件斷點:

添加條件斷點:

b 行號 if 條件

深入了解Linux —— 調試程序

如上圖所示,新添加的條件斷點(當i==10時觸發)。

深入了解Linux —— 調試程序

可以看到程序在i==0時,斷點觸發,停止在第九行。

給已存在斷點增加條件:

當我們需要給已經存在的斷點增加條件時,我們使用指令:

condition 斷點編號 條件

深入了解Linux —— 調試程序

到這里,本篇內容就結束了,希望對你有所幫助。

制作不易,感謝大佬的支持。

相關閱讀

主站蜘蛛池模板: 欧美成人a视频 | 欧美成人三级网站 | 两性免费视频 | 亚洲一级毛片在线播放 | 99久久精品免费看国产一区二区 | 日本在线观看不卡免费视频 | 男女免费视频网站 | 91精品国产91久久久久 | 欧美性猛交xxx免费看人妖 | 国产精品.com | 国产亚洲一区二区在线观看 | 日本亚洲欧美高清专区vr专区 | 亚洲最大的视频网站 | 免费看一级欧美激情毛片 | 午夜爽爽爽 | 亚洲精品国自产拍在线观看 | 一区二区三区国产美女在线播放 | 毛片免费看网站 | 久久国产精品免费看 | 美国人成毛片在线播放 | 男人和女人在床做黄的网站 | 天堂色网站 | 欧美日韩中文字幕在线观看 | 91在线精品亚洲一区二区 | 国产精品亚洲国产三区 | 日韩欧美二区 | 欧美精品国产一区二区三区 | 手机看片日韩国产一区二区 | 久久精品道一区二区三区 | 日本久久伊人 | 中文字幕欧美一区 | 亚洲一区天堂 | 国产欧美日韩精品第二区 | 久草视频在线资源站 | 日韩成人精品日本亚洲 | 国产猛烈无遮掩视频免费网站男女 | 91精品啪在线观看国产91九色 | 国产三级三级三级 | 美女一级毛片免费看看 | 亚洲免费在线视频播放 | 亚洲欧美国产精品专区久久 |