日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

debug —— C语言 编译时候进行debug的调试

發布時間:2025/10/17 编程问答 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 debug —— C语言 编译时候进行debug的调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

gdb是the GNU Debugger的簡稱。它是一款UNIX平臺的調試器(debugger),可用于為C, C++, Objective-C, Java, Fortran等程序debug。

在gdb中,你可以通過設置斷點(break point)來控制程序運行的進度,并查看斷點時的變量和函數調用狀況,從而發現可能的問題。在許多IDE中,gdb擁有圖形化界面。

?

一、初次使用gdb調試器,出現的No symbol table is loaded. Use the "file" command.問題:

首先使用gcc ? -g ? ?.c文件 ? -o ?可執行文件名 ?進行編譯;再使用gdb + 可執行文件名進入gdb環境,進行調試

為了使用gdb對進行調試,必須使用-g選項(在編譯時生成debug信息)

命令如下如:

#gcc -g test.c -o test #gdb test

? ?如果上一步gdb + 不是 -g編譯后的 可執行文件,而是 gdb? ./a.out ,則會出現?Use the "file" command.問題

(gdb)list

? ?list命令是用來列出源碼的。
? ?詳細的list的使用查看文章《?debug —— list調試命令》

(2) ? gdb ?test

(3) ?list等gdb命令;

(如有必要,使用:$chmod +x test來增加用戶的執行權限。)

?

二、使用gdb調試:

1》啟動gdb:

[root@node-2 jieer]# gcc -g struct.c -o struct [root@node-2 jieer]# gdb struct

2》顯示程序:詳細的list的使用查看文章《?debug —— list調試命令》

<1> 將顯示以第3行為中心,總共10行的程序。

如果要查看某個文件中的內容,需要說明文件名(例如:(gdb) list struct.c:12)。

(gdb) list 3

<2>可以具體說明所要列出的程序行的范圍(即 顯示5-15行的程序).

(gdb) list 5,15

<3>顯示某個函數.

(gdb) list main

3》設置斷點

<1>我們可以在程序的某一行設置斷點比如:

(gdb) break 16 (或者是簡寫 b 16)

將在test.c的第16行設置斷點。

<2>你可以查看自己設置的斷點:

(gdb) info break

<3>每個斷點有一個識別序號。我們可以根據序號刪除某個斷點:

(gdb) delete 1

<4>也可以刪除所有斷點:

(gdb) delete breakpoints

到目前為止,程序內變量的賦值都是在程序內部完成的,如果程序內的一些變量需要執行文件的時候,用命令行傳入呢?
例如:需要你打印出argv[0]、argv[1]、argv[2]的值得一個函數你該如何操作呢?

《可以查看文章《debug —— set args調試命令(作為程序運行時的參數)》

4》保存斷點

<1>

(gdb) info break

??????Num Type Disp Enb Address What

1 breakpoint keep y 0x0000000000400536 in main at struct.c:12

2 breakpoint keep y 0x0000000000400547 in main at struct.c:13

<2>

(gdb) save breakpoint fig.dp

Saved to file 'fig.dp'.

<3>

[root@node-2 jieer]# gdb struct -x fig.dp

GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-100.el7_4.1

Copyright (C) 2013 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WA RRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-redhat-linux-gnu".

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>...

Reading symbols from /root/jieer/struct...done.

Breakpoint 1 at 0x400536: file struct.c, line 12.

Breakpoint 2 at 0x400547: file struct.c, line 13.

5》運行控制

<1>讓程序從斷點開始,再多運行一行(可以看函數內嵌套的另一個函數的內容):

(gdb) step (可以用簡寫 s) 源代碼:21 int ccc(){22 int total = 0;23 char other[512] = {'\0'};24 25 bbb(&total);26 printf("ccc:total=%d\n",total);27 printf("ccc:total=%p\n",&total);28 ddd(other);29 }30 int main(){31 ccc();32 return 0;33 }

步驟1:在文件內第30行設置一個斷點,即在test.c文件,mian函數中第30 行。
步驟2:運行程序:可以看到執行到ccc()函數哪一行了;
步驟3:執行s命令:從此處開始多運行一行,進入ccc()函數內部;
步驟4,5:繼續調試函數:看到bbb()函數,這是很確定我們進入了ccc()函數中了。

那么不用s命令會有怎么的結果呢?我們來看一下

<2>也可以使用下面命令,從斷點恢復運行,直到下一個斷點:

(gdb) continue

<3>使用run重新開始運行

(gdb) run

程序正常結束。

6》退出

使用下面命令退出gdb:

(gdb) quit (可以使用簡寫 q 或者 .qu)

三、舉例分析:

1》struct.c文件的源碼如下:

1 #include<stdio.h>2 #include<stdlib.h>3 #include<string.h>4 struct student5 {6 char *name;7 int score;8 }stu,*pstu;9 10 int main()11 {12 stu.name = (char *)malloc(20*sizeof(char));13 strcpy(stu.name,"jie");14 stu.score = 90;15 16 pstu = (struct student *)malloc(sizeof(struct student));17 pstu->name = (char *)malloc(20*sizeof(char));18 strcpy(pstu->name,"jieer");19 pstu->score = 9;20 21 return 0;22 }

2》具體操作如下:

[root@node-2 jieer]# gcc -g struct.c -o struct[root@node-2 jieer]# gdb struct (gdb) break 12

Breakpoint 1 at 0x400536: file struct.c, line 12.

(gdb) break 13

Breakpoint 2 at 0x400547: file struct.c, line 13.

(gdb) r

Starting program: /root/jieer/struct

Breakpoint 1, main () at struct.c:12

12 stu.name = (char *)malloc(20*sizeof(char));

Missing separate debuginfos, use: debuginfo-install glibc-2.17-196.el7_4.2.x86_64

(gdb) p stu.name

$1 = 0x0

(gdb) c

Continuing.

Breakpoint 2, main () at struct.c:13

13 strcpy(stu.name,"jie");

(gdb) p stu.name

$2 = 0x602010 ""

(gdb) quit

A debugging session is active.

?

Inferior 1 [process 12909] will be killed.

?

Quit anyway? (y or n) y

總結

以上是生活随笔為你收集整理的debug —— C语言 编译时候进行debug的调试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久国产免费观看 | 日本免费中文字幕 | 国产亚洲一区二区三区不卡 | 成人91视频| 欧美日韩黄 | 日韩 国产 一区 | 国产午夜精品一区二区三区嫩草 | 高清视频一区二区三区 | 黄色私人影院 | 精品无码m3u8在线观看 | 国产精品久久久久久久av | 高h1v| 久久依人网| 欧美精品久久99 | 无码人妻丰满熟妇啪啪网站 | 成人羞羞国产免费动态 | 国产成人一区二区三区电影 | 日韩精品极品视频免费观看 | av中文在线天堂 | 日韩三级在线 | 男女激情啪啪 | 青娱乐在线免费观看 | 日韩视频在线免费 | 伊人色区 | 久久久久久草 | 国产精品99无码一区二区视频 | 日日射日日干 | 91色伦| 潘金莲一级淫片a.aaaaa播放 | 亚洲免费观看高清完整版在线 | 日韩超碰| 国产精品无码乱伦 | 少妇真实被内射视频三四区 | 日日操夜夜操视频 | 97在线精品视频 | 日本一级片免费看 | 久久中文字幕高清 | 草逼视频网 | 久本草精品 | 99精品在线看 | 91快色| 实拍澡堂美女洗澡av | 天天干干天天 | 天堂一级片 | 日韩一区网站 | 先锋av资源 | 国产婷婷一区二区 | 亚洲国产中文字幕 | 黄色国产网站 | 午夜成人免费视频 | 国产女人和拘做受视频免费 | 自拍偷拍第3页 | 亚洲国产精品18久久久久久 | 亚洲国产精品久久人人爱 | 欧美日韩一区二区在线观看 | 黄色网久久 | 欧美猛男gaygay | 国产亚洲一区二区三区在线观看 | 精品国产亚洲一区二区麻豆 | 波多野结衣中文字幕一区 | 91国自产精品中文字幕亚洲 | 亚洲一区欧美 | 黄色视屏免费 | 男人把女人捅爽 | 日本视频在线观看免费 | 亚洲精品久久久久久国 | 亚洲丁香网 | 香港三级日本三级三69 | 最近中文字幕在线观看视频 | 小泽玛利亚一区二区三区在线观看 | 免费v片在线观看 | 精品欧美色视频网站在线观看 | 精品动漫3d一区二区三区免费版 | 国产精品一区二区三区线羞羞网站 | 在线va| 好吊妞视频一区二区三区 | 狠狠操网站 | 4438国产精品一区二区 | 国内精品偷拍 | v99av| 在厨房拨开内裤进入毛片 | 亚洲成人中文字幕 | 久久亚洲国产成人精品性色 | 一二三四视频社区在线 | 国产又黄又猛又爽 | 中国丰满人妻videoshd | 成人片在线视频 | a视频网站 | 国产又大又硬又粗 | 亚洲成年人 | 99热超碰| 污污视频网站免费观看 | 雷电将军和丘丘人繁衍后代视频 | 免费不卡视频 | 中文字幕超清在线免费观看 | 日韩av福利 | 欧美乱大交xxxxx潮喷l头像 | 日韩黄色精品视频 | 成人污视频|