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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

gdb学习(二)[第二版]

發(fā)布時間:2025/3/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gdb学习(二)[第二版] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

查看運行時數(shù)據(jù)

print?-?查看變量值

?

ptype?–?查看變量類型

#ptype?i

#ptype?“aaa” 打印字符串”aaa”的類型

#ptype?array 打印數(shù)組array的類型

#ptype?main 打印main函數(shù)的類型

?

print?array?–?查看數(shù)組

#p?arr1

#p?arr1[2] 查看數(shù)組arr2第三個元素值

#p?&arr1[2] 打印數(shù)組元素的地址

#p?&arr1 打印數(shù)組首地址,與p?&arr1[0]作用類似

?

print?*array@len?–?查看動態(tài)內存

#p?*arr2@10?

#p?*arr2@15? #將數(shù)組越界之后的內存也打印出來了

#p?*arr@10 #靜態(tài)的數(shù)組也可以改方式打印

#p?arr[2]@2 #從arr[2]開始的兩個元素

#p?arr@2 #打印兩個數(shù)組

?

print?x=5?–?動態(tài)改變運行時數(shù)據(jù)

#print?i?=?1000

?

程序錯誤

編譯錯誤:編寫程序的時候沒有符合語言規(guī)范導致編譯錯誤【語法錯誤】。

運行時錯誤:編譯器檢查不出這種錯誤,但在運行的時候可能會導致程序崩潰【如:內存地址非法訪問】。

邏輯錯誤:編譯和運行都很順利,但是執(zhí)行結果不對

?

gdb調試邏輯錯誤

//示例-實現(xiàn)逆序輸出字符串hello,但是卻沒有任何輸出 #include <stdio.h> int main(void) {int i; char str[6] = "hello";char reverse_str[6] = "";printf("%s\n", str);for (i=0; i<5; i++)reverse_str[5-i] = str[i]; //Error:應該是reverse_str[4-i]...printf("%s\n", reverse_str);return 0; }


gdb調試段錯誤

段錯誤是由于訪問非法地址而產(chǎn)生的錯誤。

1、訪問系統(tǒng)數(shù)據(jù)區(qū),尤其是往系統(tǒng)保護的內存地址寫數(shù)據(jù)。最常見就是給一個0地址指針賦值?

2、內存越界(數(shù)組越界,變量類型不一致等)?訪問到不屬于你的內存區(qū)域

//示例 #include <stdio.h> #include <stdlib.h> void segfault1() { int *p = NULL; *p = 100; } void segfault2() { char buf[1] = "a"; buf[13] = 'A'; printf("%c\n",buf[13]); } void segfault3() { char buf[1] = "a"; buf[10] = 'A'; printf("%c\n",buf[10]); } int main() { segfault1(); // segfault2(); // segfault3(); return 0; }

where命令?or?bt命令:棧回溯,顯示導致段錯誤的執(zhí)行函數(shù)樹

?


wh命令查看程序代碼窗口

?

?

core文件調試

1、core文件

在程序崩潰時,一般會生成一個文件叫core文件。core文件記錄的是程序崩潰時的內存映像,并加入調試信息。core文件生成的過程叫做core?dump

?

2、設置生成core文件

ulimit?-c?? #查看core-dump狀態(tài)

ulimit?-c?數(shù)字?(如:ulimit?-c?1024)

ulimit?-a #用于查看當前所有狀態(tài)信息

?

將ulimit?-c?unlimited寫入~/.bashrc,則默認會生成core文件

?

3、gdb利用core文件調試

gdb?程序名?[core-file] #如:gdb?bugging?core



總結

以上是生活随笔為你收集整理的gdb学习(二)[第二版]的全部內容,希望文章能夠幫你解決所遇到的問題。

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