Linux開發工具之gdb(下)

来源:http://www.cnblogs.com/baiyifan/archive/2016/03/16/5282760.html
-Advertisement-
Play Games

三、gdb調試(下)01.查看運行時數據print - 查看變數值ptype - 查看類型print array - 查看數組print *array@len - 查看動態記憶體print x =5 - 改變運行時數據#vi simple.c#include<stdio.h>long fun(int


三、gdb調試(下)01.查看運行時數據print - 查看變數值ptype - 查看類型print array - 查看數組print *array@len - 查看動態記憶體print x =5 - 改變運行時數據#vi simple.c#include<stdio.h>long fun(int n);int main(int argc,char *argv[]){ int i; int x = 5; double z = 2.5; char ch  = 'q';  int arr1[] = {0,1,2,3,4,5,6,7,8,9}; int *arr2 = (int *)malloc(sizeof(int)*10); for(i=0;i<10;i++) { arr2[i] = i; } printf("Entering main ...\n"); for(i=0;i<argc;++i) { printf("%s ",argv[i]); } printf("\n"); long result = 0; for(i=1;i<100;++i) { result += i; } printf("result[1-100] = %d\n", result); printf("result[1-10] = %d\n",func(10)); printf("Exiting main ...\n"); retuln 0;}02.gdb調試邏輯錯誤#vi reverse.c#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];(邏輯出錯的地方,將reverse_str[5-i]改為reverse_str[4-i]) printf("%s\n",reverse_str); return 0;}:wq#make#./reversehello(空,出錯的原因:單步調試在迴圈完成後,查看reverse_str的結果,p reverse_str,結果是"\000olleh",而列印時以"\0"開頭,所以停止。#make clean#make#./reverse03.gdb調試段錯誤  段錯誤是由於訪問非法地址而產生的錯誤。    訪問系統數據區,尤其是往系統保護的記憶體地址寫數據。最常見就是給一個指針以0地址;    記憶體越界(數組越界,變數類型不一致)訪問到不屬於你的內存區域#vi bugging.c#include<stdio.h>#include<stdlib.h>void segfault(){ int *p = NULL; *p = 100;}int main(void){ segfault(); char buf[1] = "a"; buf[10003] = "A"; printf("%c\n",buf[10003]); return 0;}#./bugging.c段錯誤Starting program: /home/study/cppcourse/devtool/06gdb/buggingProgram received signal SIGSEGV,Segmentation fault.(gdb)bt(棧回溯)#0 0x12345678 in segfault () at bugging.c:7#1 0x12345678 in main() at bugging.c:12#2 0x12312312 in __libc_start_main() from /lib/tls/llibc.so.604.core文件調試  core文件 在程式崩潰時,一般會生成一個文件叫core文件。core文件記錄的是程式崩潰時的記憶體映像,並加入調試信息。core文件生成的過程叫做core dump  設置生成core文件 ulimit -c 查看core-dump狀態 ulimit -c 數字(如:ulimit -c 1024) ulimit -c unlimited  gdb利用core文件調試 gdb文件名core文件 bt#ulimit -c0(表示無法查看core文件的名)#./bugging.c段錯誤(core dumped)#ulimit -a core file size (blocks size) 0#lscore.9351#gdb bugging core.9351……(gdb)bt(查看棧回溯信息)gdb總結  查看運行時數據  程式錯誤  gdb調試邏輯錯誤  gdb調試段錯誤  core文件
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 export database 類似sqlserver的分離資料庫 歡迎轉載 ,轉載時請保留作者信息。本文版權歸本人所有,如有任何問題,請與我聯繫[email protected] 。 過錯 這種方式不保證數據有效性.但是非常快,不是嗎? 這是問題的討論.http://www.cubrid.or
  • 這篇博文是我在基於Ubuntu學習一些知識的札記,方便日後進行不斷回顧,這裡進行統一記錄,當然當學到新的東西也會陸續更新!!!還請各位博主不要見笑,小弟在此謝過~\(≧▽≦)/~啦啦啦!!!! 由於個人原因,我並不喜歡在桌面上放一些很花哨的東西,追求簡約一直是我個人所推崇的。所以,我的Ubuntu系
  • 安裝: 第一種方式:sudo apt-get install openjdk-7-jdk(or openjdk-6-jdk) 第二種方式:tar -zxvf jdk-7u79-linux-x64.tar.gz 添加jdk
  • 前言:最近在阿裡雲申請了一個雲伺服器,然後已買了一個功能變數名稱。比如www.haha.com ; 在雲伺服器上安裝了tomcat ,訪問伺服器就成了 http://www.haha.com:8080/ 。 這個8080怎麼看都不舒服,問題是怎麼去掉8080埠號呢? 訪問地址 : http://www.h
  • 使用redmine創建問題的時候,可能會發現沒有我們需要的屬性,這時候我們可以添加自定義的屬性。 以添加滿意度屬性為例: 1.進入redmine管理界面,選擇自定義屬性 2.選擇問題下麵的新建自定義屬性 3.按照需求添加屬性,把需要跟蹤的問題標簽勾選上 4.現在我們創建問題的時候就有自定義的屬性了
  • u8 是 unsigned charu16 是 unsigned shortu32 是 unsigned int
  • 1.在要配置互信的機器(web-1和web-2)上生成各自經過認證的key文件。 2.將所有的key文件彙總到一個總的認證文件夾中。 3.將打包的key發給想要進行互信的機器(web-1,web-2)
  • 開始學習hadoop啦!!! 在Ubuntu14.04上新建了一個名為hadoop的用戶,但總是遇到各種許可權問題,於是就想乾脆把這個賬戶變成root賬戶。 網上查到說是直接修改/etc/sudoers,修改時提示read-only,修改不了,自然而然想到去修改文件的許可權, sudo chown u+
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...