最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux下gdb調(diào)試打印進程內(nèi)存信息方式

 更新時間:2023年09月04日 09:27:27   作者:凌肖戰(zhàn)  
這篇文章主要介紹了Linux下gdb調(diào)試打印進程內(nèi)存信息方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Linux下gdb調(diào)試打印進程內(nèi)存信息

以下面代碼為例,打印進程的內(nèi)存信息。

代碼如下:

#include <stdio.h>
int main(void)
{
    int i = 0;
    char data[100] = {0};
    for(i = 0; i < (sizeof(data)/sizeof(char)); i++)
    {
        data[i] = i;
    }
    return 0;
}

gdb 調(diào)試中,也可以打印進程的內(nèi)存信息。

命令如下:i proc mappings

下面進行 gdb 調(diào)試,打印進程的內(nèi)存信息。

操作如下:

  • 首先,在程序某一行打斷點。
  • 其次,輸入 r 命令運行程序。
  • 最后,輸入 i proc mappings 命令打印進程的內(nèi)存信息。

如下所示:

(gdb) i proc mappings
process 4261
Mapped address spaces:

          Start Addr           End Addr       Size     Offset objfile
      0x555555554000     0x555555555000     0x1000        0x0 /home/wangtian/Code_Learns/C_Learns/debug/debug2/main.out
      0x555555555000     0x555555556000     0x1000     0x1000 /home/wangtian/Code_Learns/C_Learns/debug/debug2/main.out
      0x555555556000     0x555555557000     0x1000     0x2000 /home/wangtian/Code_Learns/C_Learns/debug/debug2/main.out
      0x555555557000     0x555555558000     0x1000     0x2000 /home/wangtian/Code_Learns/C_Learns/debug/debug2/main.out
      0x555555558000     0x555555559000     0x1000     0x3000 /home/wangtian/Code_Learns/C_Learns/debug/debug2/main.out
      0x7ffff7dc3000     0x7ffff7de5000    0x22000        0x0 /usr/lib/x86_64-linux-gnu/libc-2.31.so
      0x7ffff7de5000     0x7ffff7f5d000   0x178000    0x22000 /usr/lib/x86_64-linux-gnu/libc-2.31.so
      0x7ffff7f5d000     0x7ffff7fab000    0x4e000   0x19a000 /usr/lib/x86_64-linux-gnu/libc-2.31.so

可以看到,輸出了進程的內(nèi)存映射信息。

也可顯示更詳細的進程內(nèi)存信息

命令為:i files 命令 或者  i target 命令

包括引用的動態(tài)鏈接庫等等。。。

如下所示:

Linux之gdb基本調(diào)試命令與總結(jié)

一、常見gdb調(diào)試命令

表1 gdb基本調(diào)試指令

命令描述
backtrace(或bt)查看各級函數(shù)調(diào)用及參數(shù)
finish連續(xù)運行到當前函數(shù)返回為止,然后停下來等待命令
frame(或f) 幀編號選擇棧幀
info(或i) locals查看當前棧幀局部變量的值
list(或l)列出源代碼,接著上次的位置往下列,每次列10行
continue(c)列出從第幾行開始的源代碼
list 函數(shù)名繼續(xù)執(zhí)行
next(或n)執(zhí)行下一行語句
print(或p)打印表達式的值,通過表達式可以修改變量的值或者調(diào)用函數(shù)
quit(或q)退出 gdb 調(diào)試環(huán)境
set var修改變量的值
start開始執(zhí)行程序,停在 main 函數(shù)第一行語句前面等待命令
step(或s)執(zhí)行下一行語句,如果有函數(shù)調(diào)用則進入到函數(shù)中
break(b)設置斷點
delete(d)刪除斷點
attach <pid>attach到進程 ID 為 pid 的進程

二、info調(diào)試指令

表2 info調(diào)試命令

命令描述
info registers查看除了浮點寄存器以外的寄存器
info all-registers查看所有寄存器,包括浮點寄存器
info registers <regname …>查看所指定的寄存器
info break查看斷點信息
info watchpoints 列出當前所設置的所有觀察點
info signals info handle查看有哪些信號正在被GDB檢測
info frame查看當前程序棧的信息
info threads可以看多線程
info args查看當前函數(shù)參數(shù)信息
info locals查看當前程序棧的局部變量

三、內(nèi)存查看

3.1 打印內(nèi)存數(shù)據(jù)

gdb查看指定地址的內(nèi)存地址的值:examine 簡寫 x-----使用gdb> help x 來查看使用方式

x/ (n,f,u為可選參數(shù))

  • n: 需要顯示的內(nèi)存單元個數(shù),也就是從當前地址向后顯示幾個內(nèi)存單元的內(nèi)容,一個內(nèi)存單元的大小由后面的u定義
  • f:顯示格式               

x(hex) 按十六進制格式顯示變量。               

d(decimal) 按十進制格式顯示變量。               

u(unsigned decimal) 按十進制格式顯示無符號整型。               

o(octal) 按八進制格式顯示變量。              

t(binary) 按二進制格式顯示變量。               

a(address) 按十六進制格式顯示變量。               

c(char) 按字符格式顯示變量。               

f(float) 按浮點數(shù)格式顯示變量

  • u:每個單元的大小,按字節(jié)數(shù)來計算。默認是4 bytes。GDB會從指定內(nèi)存地址開始讀取指定字節(jié),并把其當作一個值取出來,并使用格式f來顯示

b:1 byte     h:2 bytes     w:4 bytes g:8 bytes

比如x/3uh 0x54320表示從內(nèi)存地址0x54320讀取內(nèi)容,h表示以雙字節(jié)為單位,3表示輸出3個單位,u表示按照十六進制顯示。

3.2 打印數(shù)組

比如我有一個數(shù)組的定義 :int a[] = {1, 2, 3, 4, 5};

那么想要顯示的時候就可以寫:

p *a@5

這樣就會顯示數(shù)組a中的所有元素。

也可以使用display在一部調(diào)試的時候都顯示:

display *a@5

四、多線程調(diào)試命令

表4 多線程調(diào)試命令

命令描述
info threads顯示當前可調(diào)試的所有線程,每個線程會有一個GDB為其分配的ID,后面操作線程的時候會用到這個ID。 前面有*的是當前調(diào)試的線程
thread ID(1,2,3…)切換當前調(diào)試的線程為指定ID的線程
break thread_test.c:123 thread all(例:在相應函數(shù)的位置設置斷點break pthread_run1)在所有線程中相應的行上設置斷點
thread apply ID1 ID2 command讓一個或者多個線程執(zhí)行GDB命令command
thread apply all command讓所有被調(diào)試線程執(zhí)行GDB命令command
set scheduler-locking 選項 command設置線程是以什么方式來執(zhí)行命令
set scheduler-locking off不鎖定任何線程,也就是所有線程都執(zhí)行,這是默認值
set scheduler-locking on只有當前被調(diào)試程序會執(zhí)行
set scheduler-locking on step在單步的時候,除了next過一個函數(shù)的情況(熟悉情況的人可能知道,這其實是一個設置斷點然后continue的行為)以外,只有當前線程會執(zhí)行

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Ubuntu上Vim安裝NERDTree插件的詳細操作步驟

    Ubuntu上Vim安裝NERDTree插件的詳細操作步驟

    這篇文章主要介紹了Ubuntu上Vim安裝NERDTree插件操作步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Linux網(wǎng)絡分析終極武器之Tcpdump深度指南

    Linux網(wǎng)絡分析終極武器之Tcpdump深度指南

    Tcpdump 是 Linux/Unix 系統(tǒng)上最經(jīng)典的命令行網(wǎng)絡抓包工具,用于捕獲、過濾和分析網(wǎng)絡數(shù)據(jù)包,下面小編就為大家詳細介紹一下它的具體使用
    2025-10-10
  • Ubuntu16.04下CUDA8.0和CUDA9.0共存

    Ubuntu16.04下CUDA8.0和CUDA9.0共存

    這篇文章主要介紹了Ubuntu16.04下CUDA8.0和CUDA9.0共存,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Linux一行命令處理批量文件詳解

    Linux一行命令處理批量文件詳解

    這篇文章主要介紹了Linux一行命令處理批量文件詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Linux中Crontab(定時任務)命令的用法

    Linux中Crontab(定時任務)命令的用法

    這篇文章主要介紹了Linux中Crontab(定時任務)命令的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Linux服務器從頭配置全過程

    Linux服務器從頭配置全過程

    這篇文章主要介紹了Linux服務器從頭配置全過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03
  • linux分析服務器內(nèi)存常用命令與查找文件工作路徑方式

    linux分析服務器內(nèi)存常用命令與查找文件工作路徑方式

    文章介紹了如何使用`auditd`服務查看內(nèi)存使用情況,并通過`ps`命令按內(nèi)存使用排行,此外,還說明了通過進程的工作目錄(cwd)來定位文件位置,從而確定服務的具體位置
    2025-10-10
  • Apache源碼安裝和虛擬主機配置的教程詳解

    Apache源碼安裝和虛擬主機配置的教程詳解

    這篇文章主要介紹了Apache源碼安裝和虛擬主機配置的教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • linux中chmod命令用法詳解

    linux中chmod命令用法詳解

    在本篇文章里小編給大家分享了關(guān)于linux中chmod命令用法和相關(guān)知識點,需要的朋友們跟著學習下。
    2019-04-04
  • 阿里云linux服務器下安裝Apache的簡單方法

    阿里云linux服務器下安裝Apache的簡單方法

    本文介紹下,在阿里云的linux服務器上,安裝apache的簡單方法,需要的朋友可以參考下
    2014-05-05

最新評論

赞皇县| 隆子县| 丽水市| 温宿县| 格尔木市| 张家界市| 克什克腾旗| 苏州市| 馆陶县| 集安市| 大厂| 建水县| 彭水| 西畴县| 清河县| 台湾省| 秦皇岛市| 和龙市| 信阳市| 镇赉县| 武陟县| 桐梓县| 缙云县| 漾濞| 嵊泗县| 平安县| 嘉峪关市| 永兴县| 扬州市| 南汇区| 玉环县| 乌鲁木齐县| 六安市| 罗江县| 珲春市| 饶阳县| 富平县| 贡山| 岑溪市| 和龙市| 永靖县|