国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

聊一聊 GDB 調(diào)試程序時(shí)的幾個(gè)實(shí)用命令

開發(fā) 開發(fā)工具
用慣了宇宙第一的 Visual Studio 再用其他的開發(fā)工具還是有一點(diǎn)不習(xí)慣,不習(xí)慣在于想用的命令或者面板找不到,總的來說還是各有千秋吧,今天我們來聊一下幾個(gè)在調(diào)試中比較實(shí)用的命令。

一:背景

1. 講故事

用慣了宇宙第一的 Visual Studio 再用其他的開發(fā)工具還是有一點(diǎn)不習(xí)慣,不習(xí)慣在于想用的命令或者面板找不到,總的來說還是各有千秋吧,今天我們來聊一下幾個(gè)在調(diào)試中比較實(shí)用的命令:

  • 查看內(nèi)存
  • 硬件斷點(diǎn)
  • 虛擬內(nèi)存布局

二:命令解讀

1. 查看內(nèi)存

相信大家都知道 Visual Studio 直接提供了 Memory 面板來觀察內(nèi)存布局,但 VSCode 沒有,還需要自己手敲命令來實(shí)現(xiàn),這就比較麻煩了,為了方便先上一段測(cè)試代碼。

#include <iostream>

using namespace std;

int main()
{
    int a = 10;
    int b = 11;
    int c = 12;
}

調(diào)試器配的是 GDB,只能用它的 x 命令觀察內(nèi)存,類似 WinDbg 的 d系列命令,我們?cè)?nbsp;int c=12 處下個(gè)斷點(diǎn),命中后使用 -exec x/40xw $esp 觀察 esp處的內(nèi)存塊,截圖如下:

圖片

這里的 x/40xw $esp 是什么意思呢?翻譯成 WinDbg 的術(shù)語就是 dd esp L40 的意思,也就是顯示 40 個(gè) dword 指針單元的內(nèi)存地址。

從內(nèi)存地址上看 a,b 都存放在線程棧上,雖然沒有 VS 便捷,但還是可以用的。

2. 硬件斷點(diǎn)

說實(shí)話到現(xiàn)在都沒搞明白為什么 Visual Studio 不支持硬件斷點(diǎn),其實(shí)是可以做的,熟悉 WinDbg 的朋友都知道有一個(gè) ba 命令就是專門用來設(shè)置硬件斷點(diǎn),硬件斷點(diǎn)牛的地方在于可以對(duì) 內(nèi)存地址 的讀寫進(jìn)行監(jiān)控,不過它需要 CPU 的調(diào)試寄存器支持,即 dr0 ~ dr7 。

比如我在 windbg 中對(duì) 04ee5000 下一個(gè)讀斷點(diǎn),輸出如下:

eax=04ee5000 ebx=00000000 ecx=7746dfe0 edx=10088020 esi=7746dfe0 edi=7746dfe0
eip=77434e50 esp=0897f804 ebp=0897f830 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!DbgBreakPoint:
77434e50 cc              int     3

0:014> ba r4 04ee5000
0:014> g
0:014> r dr0
dr0=04ee5000

在 GDB 中也有類似的 硬件斷點(diǎn),即 rwatch 和 awatch 命令,前者用來監(jiān)視讀操作,后者監(jiān)視 讀寫操作,這里我們測(cè)試下 awatch 命令,測(cè)試代碼如下:

int main()
{
    int a = 10;
    int b = 11;

    a = 15;

    int c = 12;
}

接下來在 int b=11 處下斷點(diǎn),通過 x 命令找到 a 所在的內(nèi)存地址,然后使用 awatch 進(jìn)行監(jiān)控,不過有點(diǎn)坑的是 awatch 需要轉(zhuǎn)成具體類型,相當(dāng)于監(jiān)視的范圍寬度,輸出如下:

-exec x/10x $esp+0x4
0xffffd11c: 0x0000000a 0xf7dd4000 0xf7dd4000 0x00000000
0xffffd12c: 0xf7c06ed5 0x00000001 0xffffd1c4 0xffffd1cc
0xffffd13c: 0xffffd154 0xf7dd4000
-exec awatch 0xffffd11c
Cannot watch constant value `0xffffd11c'.
-exec awatch *(int*)0xffffd11c
Hardware access (read/write) watchpoint 3: *(int*)0xffffd11c
-exec c
Continuing.

Hardware access (read/write) watchpoint 3: *(int*)0xffffd11c

Old value = 10
New value = 15
main () at /home/skyfly/code/main.cpp:12
12     int c = 12;

圖片

從上面輸出的信息看非常明確,也非常有意思,給 GDB 點(diǎn)一個(gè)贊。

3. 虛擬地址布局

這個(gè)貌似也是 VS 不具有的功能,在 GDB 中得到了支持,相當(dāng)于 WinDBG 中的 !address 命令,觀察虛擬地址布局好處多多,可以看到內(nèi)存的分配情況,比如 stack 是否溢出就能從中觀察得到,在 GDB 中可以使用 i proc mapping 命令,輸出如下:

-exec i proc mapping
process 5142
Mapped address spaces:

 Start Addr   End Addr       Size     Offset objfile
 0x56555000 0x56556000     0x1000        0x0 /home/skyfly/code/main.out
 0x56556000 0x56557000     0x1000     0x1000 /home/skyfly/code/main.out
 0x56557000 0x56558000     0x1000     0x2000 /home/skyfly/code/main.out
 0x56558000 0x56559000     0x1000     0x2000 /home/skyfly/code/main.out
 0x56559000 0x5655a000     0x1000     0x3000 /home/skyfly/code/main.out
 0x5655a000 0x5657c000    0x22000        0x0 [heap]
 0xf7ac7000 0xf7ac9000     0x2000        0x0 
 0xf7ac9000 0xf7acb000     0x2000        0x0 /usr/lib32/libgcc_s.so.1
 0xf7acb000 0xf7ae1000    0x16000     0x2000 /usr/lib32/libgcc_s.so.1
 0xf7ae1000 0xf7ae6000     0x5000    0x18000 /usr/lib32/libgcc_s.so.1
 0xf7ae6000 0xf7ae7000     0x1000    0x1c000 /usr/lib32/libgcc_s.so.1
 0xf7ae7000 0xf7ae8000     0x1000    0x1d000 /usr/lib32/libgcc_s.so.1
 0xf7ae8000 0xf7af2000     0xa000        0x0 /usr/lib32/libm-2.31.so
 0xf7af2000 0xf7bb3000    0xc1000     0xa000 /usr/lib32/libm-2.31.so
 0xf7bb3000 0xf7bea000    0x37000    0xcb000 /usr/lib32/libm-2.31.so
 0xf7bea000 0xf7beb000     0x1000   0x101000 /usr/lib32/libm-2.31.so
 0xf7beb000 0xf7bec000     0x1000   0x102000 /usr/lib32/libm-2.31.so
 0xf7bec000 0xf7c05000    0x19000        0x0 /usr/lib32/libc-2.31.so
 0xf7c05000 0xf7d5d000   0x158000    0x19000 /usr/lib32/libc-2.31.so
 0xf7d5d000 0xf7dd1000    0x74000   0x171000 /usr/lib32/libc-2.31.so
 0xf7dd1000 0xf7dd2000     0x1000   0x1e5000 /usr/lib32/libc-2.31.so
 0xf7dd2000 0xf7dd4000     0x2000   0x1e5000 /usr/lib32/libc-2.31.so
 0xf7dd4000 0xf7dd5000     0x1000   0x1e7000 /usr/lib32/libc-2.31.so
 0xf7dd5000 0xf7dd8000     0x3000        0x0 
 0xf7dd8000 0xf7e4d000    0x75000        0x0 /usr/lib32/libstdc++.so.6.0.28
 0xf7e4d000 0xf7f4f000   0x102000    0x75000 /usr/lib32/libstdc++.so.6.0.28
 0xf7f4f000 0xf7fad000    0x5e000   0x177000 /usr/lib32/libstdc++.so.6.0.28
 0xf7fad000 0xf7fb3000     0x6000   0x1d4000 /usr/lib32/libstdc++.so.6.0.28
 0xf7fb3000 0xf7fb5000     0x2000   0x1da000 /usr/lib32/libstdc++.so.6.0.28
 0xf7fb5000 0xf7fb7000     0x2000        0x0 
 0xf7fc9000 0xf7fcb000     0x2000        0x0 
 0xf7fcb000 0xf7fcf000     0x4000        0x0 [vvar]
 0xf7fcf000 0xf7fd1000     0x2000        0x0 [vdso]
 0xf7fd1000 0xf7fd2000     0x1000        0x0 /usr/lib32/ld-2.31.so
 0xf7fd2000 0xf7ff0000    0x1e000     0x1000 /usr/lib32/ld-2.31.so
 0xf7ff0000 0xf7ffb000     0xb000    0x1f000 /usr/lib32/ld-2.31.so
 0xf7ffc000 0xf7ffd000     0x1000    0x2a000 /usr/lib32/ld-2.31.so
 0xf7ffd000 0xf7ffe000     0x1000    0x2b000 /usr/lib32/ld-2.31.so
 0xfffdd000 0xffffe000    0x21000        0x0 [stack]

從輸出看,當(dāng)前的 stack 布局段在 0xfffdd000 ~ 0xffffe000 之間,如果發(fā)生了棧溢出就可以看下是不是超過這個(gè)范圍了哈,除了 stack 還可以看到 heap 的段范圍 0x5655a000 ~ 0x5657c000 。

三:總結(jié)

GDB 有很多實(shí)用的命令這里就不逐一介紹了,至少在 Linux 上是霸主一樣的存在,真搞不懂 netcore 的調(diào)試要和 lldb 扯在一塊,簡(jiǎn)直是不走尋常路哈 ??????

責(zé)任編輯:武曉燕 來源: 一線碼農(nóng)聊技術(shù)
相關(guān)推薦

2017-12-22 10:13:21

NFS功能Flex

2023-12-07 07:26:04

2022-11-02 08:51:01

2020-12-09 16:55:57

程序員技術(shù)

2023-12-14 11:35:32

.NET泄露模式

2023-07-06 13:56:14

微軟Skype

2019-10-16 09:37:33

流行監(jiān)控系統(tǒng)

2023-09-22 17:36:37

2021-01-28 22:31:33

分組密碼算法

2020-05-22 08:16:07

PONGPONXG-PON

2020-09-08 06:54:29

Java Gradle語言

2021-08-01 09:55:57

Netty時(shí)間輪中間件

2023-09-27 16:39:38

2024-10-28 21:02:36

消息框應(yīng)用程序

2018-06-07 13:17:12

契約測(cè)試單元測(cè)試API測(cè)試

2022-11-01 08:46:20

責(zé)任鏈模式對(duì)象

2021-01-29 08:32:21

數(shù)據(jù)結(jié)構(gòu)數(shù)組

2023-05-15 08:38:58

模板方法模式

2021-08-04 09:32:05

Typescript 技巧Partial

2018-11-29 09:13:47

CPU中斷控制器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美中文一区二区| 欧美精品九九99久久| 欧洲在线视频一区| 在线观看欧美理论a影院| 另类图片亚洲另类| 国产精品专区免费| 欧美另类z0zxhd电影| 午夜影院在线免费观看| 国产精品电影院| 亚洲 激情 在线| 久久久久久久精| 国产午夜伦鲁鲁| 99re热这里只有精品免费视频| 艳母动漫在线观看| 国模娜娜一区二区三区| 亚洲自拍偷拍二区| 蜜臀av在线播放一区二区三区| 久久99精品久久久久久秒播放器 | 欧美日韩国产精品一区二区不卡中文| 国产精品视频黄色| 中文字幕电影一区| 亚洲an天堂an在线观看| 亚洲三级在线看| 久草在线官网| 欧美性xxxx极品hd欧美风情| 李宗瑞系列合集久久| 亚洲大片免费看| 视频在线不卡| 欧美羞羞免费网站| 国产激情小视频在线| 欧美一区二区免费观在线| 久久亚洲导航| 国产一区二区三区直播精品电影| 中文字幕乱码在线播放| 久久久99免费视频| 同性恋视频一区| 91久久精品美女高潮| 亚洲免费成人| 成人短视频在线看| 久久只精品国产| www污污在线| 欧日韩精品视频| 国产激情在线播放| 久久99国产精品自在自在app| 看全色黄大色大片免费久久久| 国产精品久久久久久网站| 黑丝一区二区三区| 国产欧美123| 一区二区三区在线观看视频| 三级视频在线| 亚洲精品久久久久久久久| 国产精品毛片aⅴ一区二区三区| 91国偷自产一区二区三区的观看方式| 欧洲三级视频| 免费成人av网站| www.成人在线| 最新在线观看av网站| 4438x成人网最大色成网站| 欧美极品免费| 欧洲亚洲在线视频| 美女久久一区| 黄色a级片免费| 91九色最新地址| 国产激情欧美| 91精品国产高清久久久久久91裸体| 美女网站在线免费欧美精品| 91小视频网站| 在线不卡欧美精品一区二区三区| 天堂久久午夜av| 国产精品久久久久久亚洲调教| 久久久天天操| 77777在线| 欧美精品一区二区三区很污很色的| 精品久久久久久久久久岛国gif| 亚洲a区在线视频| 国产福利视频一区二区三区| 婷婷丁香六月天| 亚洲欧美中文在线视频| 国产成人av| 特级黄色录像片| 午夜精品福利一区二区蜜股av| 草草视频在线观看| 91社区国产高清| 久久久精品免费网站| 黄色影院在线播放| 久久夜精品香蕉| 日韩激情av在线| 天堂аⅴ在线最新版在线 | 国产精品一级二级三级| 色哟哟在线观看| 色综合久久悠悠| 欧美大陆一区二区| 亚洲午夜一区二区| 成人香蕉视频| 看高清中日韩色视频| 一区二区高清在线| 久久视频免费| 四虎精品欧美一区二区免费| 欧美亚一区二区| 精品美女久久久| 亚洲污视频在线观看| 在线日韩第一页| 日本va欧美va欧美va精品| 欧美成人免费| 国产精品美女无圣光视频| 久久综合网色—综合色88| 国产精品vvv| 农村寡妇一区二区三区| 午夜天堂影视香蕉久久| 精品三级av在线导航| 日本a视频在线观看| 亚洲第一页在线| 国产日韩一区二区三区在线播放 | 久久蜜桃一区二区| 欧美日韩免费看片| 欧美一区免费视频| 欧美高清你懂得| 久久国产电影| 可播放的18gay1069| 欧美高清视频免费观看| 成人av在线影院| 五月天国产在线| 亚洲精品高清视频| 日韩美女在线视频| 先锋影音久久久| 色网站在线看| 久久久久久九九九九| 欧美男女性生活在线直播观看| 欧美+日本+国产+在线a∨观看| 视频三区在线观看| 91精品国产高清久久久久久91裸体| 亚洲第一搞黄网站| 天天做天天爱天天综合网2021| 一区二区电影网| 99在线视频免费观看| 欧美综合在线视频| 国产日韩1区| 超碰高清在线| 日韩人妻无码精品久久久不卡| 一区二区三区天堂av| jiyouzz国产精品久久| 欧美视频二区欧美影视| 欧美a v在线播放| 欧美激情一区二区久久久| 国产精品成人免费精品自在线观看 | 国产精品久久久久久久久久三级| 亚洲精品成人精品456| av一区二区在线播放| 欧美一区二区视频| 痴汉一区二区三区| 欧美猛男超大videosgay| 9国产精品视频| 阿v视频在线观看| 无码粉嫩虎白一线天在线观看| 九九久久精品一区| 亚洲精品一卡二卡| 国产精品啊v在线| 日韩深夜视频| 国产精品亚洲αv天堂无码| 97在线免费观看视频| 精品成人国产在线观看男人呻吟| 亚洲黄色天堂| 欧美日韩美女| 97在线观视频免费观看| 92国产精品久久久久首页| 日韩你懂的电影在线观看| 国产白丝精品91爽爽久久| 欧美丝袜足交| 免费黄网站在线播放| 亚洲熟妇av日韩熟妇在线| 人人做人人澡人人爽欧美| 欧美精品日韩一区| 91美女蜜桃在线| 欧美成人自拍| 亚洲精品mv| 免费av一级电影| 亚洲一区二区三区四区中文| 久久久久久久一区二区三区| 色婷婷精品大在线视频| 国内精品久久久久影院薰衣草| 伊人久久影院| eeuss影院www在线观看| 黄色一级视频在线播放| 国产精品欧美激情在线播放| 亚洲第一av网站| 最新久久zyz资源站| 一本久道久久综合狠狠爱| 久久久精品区| 国家队第一季免费高清在线观看 | 人人爽香蕉精品| 97久久超碰| av在线播放观看| 成人免费xx| 亚洲精品二区| 国产精品永久免费观看| 亚洲国产一区自拍| 五月天国产精品| 久久久久久久久久久久久女国产乱 | 国产高清精品在线观看| 国产精品区二区三区日本|