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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

初次使用Windbg调试简单C++程序

發布時間:2025/4/14 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初次使用Windbg调试简单C++程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫個簡單C++程序;運行如下;

#include "stdafx.h" #include <iostream> using namespace std;class Student{ public:char *name;int age;float score;void say(){cout<<name<<"的年齡是"<<age<<",成績是"<<score<<endl;} };int _tmain(int argc, _TCHAR* argv[]) {Student stu;stu.name = "小明";stu.age = 15;stu.score = 92.5f;stu.say();system("pause");return 0; }

我想通過Windbg來查看一下stu.xxx的值的情況;

從 文件 菜單選擇 打開可執行文件;打開前面的exe;先不管release或debug版;

打開以后自己停留在下圖,出來一個 int 3;這應是停在程序開始處;還未執行第一條指令;

也可以輸入?.sympath srv* 命令設置符號文件路徑;沒有調試符號文件也先不管,沒有這個可能只是有的系統的東西看不到;

lm可以查看模塊;自己寫的部分是一個模塊,還有VC的模塊和Windows的模塊,如下圖;

?

輸入g執行;直接就運行到了末尾;這時調試器無法輸入命令,顯示BUSY,如下圖底部狀態欄;

?

我想中斷在?system("pause"); 這句;看下圖,

最后一句的地址應是 778d182c,不知道后面的c20800是什么,

?

重新裝載程序;輸入 bp?778d182c,在此地址設置一個斷點;

?

然后輸入 g 執行,直接就運行到了下圖;出來了 按任意鍵繼續...,這是由system("pause") 產生的,沒有中斷在?system("pause") 這句;

?

重新裝載程序;往前移動一段,bp 778d1800;

?

g 執行,也是直接到了末尾;

?

再往前設置斷點,bp 778d1000,還是直接到了末尾;不知道怎么找一個地址來設置斷點;

?

每個模塊前面顯示2個地址;估計一個是開始地址,一個是結束地址;嘗試在自己的模塊的結束地址 01014000 設置斷點;g 一下,顯示出錯如下,不能在此地址設置斷點;

這是設置指令的斷點;還可以設置內存地址等的斷點;

?

重新裝載程序;輸入 pc ,這是執行一個函數;一個個函數往下走;

?

走了好一會也沒到達自己寫的代碼;然后嘗試在00ff0000設置斷點,這是自己模塊的開始地址;也是不能在此地址設置斷點;

?

重新裝載程序,使用 p 50,這是執行50條指令;

?

1

?

輸入 p 5,p 3,估摸著往下走,看是否會停留在system("pause");這句;

?

也是直接到了最后;程序窗口出現 按任意鍵繼續...,調試器顯示BUSY;

以為調試器此時不能操作;原來,在windbg的調試菜單中,選擇 斷點 菜單,會在當前位置插入一個 int 3;int 3應該是設置一個軟件斷點;

?

然后調試器可以操作了;dt 命令是查看變量或結構體;輸入 dt stu,想看一下stu變量;顯示沒找到stu;

?

再輸入 模塊名!stu ,也沒找到;

輸入 模塊名!* ,顯示此模塊的所有符號,

?

在里面找一下看有沒有stu;沒有;找到類名Student,如下圖;

?

再找,又找到Student::say函數; stu變量沒發現;

?

輸入 dt 模塊名!Student,可看到類的三個成員變量如下圖;先到這里;

?

?

總結

以上是生活随笔為你收集整理的初次使用Windbg调试简单C++程序的全部內容,希望文章能夠幫你解決所遇到的問題。

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