欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識(shí)庫 > 分享Visual Studio原生開發(fā)的10個(gè)調(diào)試技巧

分享Visual Studio原生開發(fā)的10個(gè)調(diào)試技巧

熱門標(biāo)簽:寧波自動(dòng)外呼系統(tǒng)代理 手機(jī)地圖標(biāo)注如何刪除 世紀(jì)佳緣地圖標(biāo)注怎么去掉 巫師3為什么地圖標(biāo)注的財(cái)寶沒有 怎么給超市做地圖標(biāo)注入駐店 外呼系統(tǒng)代理品牌 十堰正規(guī)電銷機(jī)器人系統(tǒng) 外呼系統(tǒng)費(fèi)用一年 辦理400電話證件
最近碰巧讀了Ivan Shcherbakov寫的一篇文章,《11個(gè)強(qiáng)大的Visual Studio調(diào)試小技巧》。這篇文章只介紹了一些有關(guān)Visual Studio的基本調(diào)試技巧,但是還有其他一些同樣有用的技巧。我整理了一些Visual Studio(至少在VS 2008下)原生開發(fā)的調(diào)試技巧。(如果你是工作在托管代碼下,調(diào)試器會(huì)有更多的特性,在CodeProject中有介紹它們的文章),下面是我的整理的一些技巧:

異常中斷 | Break on Exception
Watch窗口中的偽變量 | Pseudo-variables in Watch Windows
符號(hào)越界后查看堆對(duì)象 |
查看數(shù)組的值
避免進(jìn)入不必要的函數(shù)
從代碼啟動(dòng)調(diào)試器 | Launch the debugger from code
在Output窗口打印
隔離內(nèi)存泄漏
調(diào)試發(fā)行版 | Debug the Release Build
遠(yuǎn)程調(diào)試


技巧1: 異常中斷

在處理被調(diào)用之前,異常發(fā)生時(shí)可以 啟動(dòng)調(diào)試器進(jìn)行中斷,可以讓你在異常發(fā)生后立即調(diào)試程序。操作調(diào)用棧便于你去查找異常發(fā)生的根本原因。

Vistual Studio允許你去指定想要中斷的異常類型或者特殊異常。選擇菜單Debug>Exceptions彈出對(duì)話框,你可以指定原生的(或者托管的)異常,除了調(diào)試器自帶的一些默認(rèn)異常,你還可以添加自己的自定義異常。

下面是一個(gè)std::exception 異常拋出時(shí)調(diào)試器中斷的例子。

更多閱讀:

  • 1.  異常拋出時(shí)如何中斷
  • 2.  如何添加新的異常
技巧2:Watch窗口中的偽變量

Watch窗口或QuickWatch對(duì)話框提供一些特定的(調(diào)試器可識(shí)別的)變量,被稱為偽變量。文檔包含以下:

$tid—–當(dāng)前線程的線程ID
$pid——進(jìn)程ID
$cmdline———-啟動(dòng)程序的命令行字符串
$user———-正在運(yùn)行程序的賬戶信息
$registername—–顯示寄存器registername 的內(nèi)容
不管怎么樣,關(guān)于最后一個(gè)錯(cuò)誤的偽變量是非常有用的:

$err——–顯示最后一個(gè)錯(cuò)誤的錯(cuò)誤碼
$err,hr—顯示最后一個(gè)錯(cuò)誤的錯(cuò)誤信息

更多閱讀:偽變量

技巧3:符合越界后查看堆對(duì)象

有時(shí)候,在調(diào)試符號(hào)越界后,你還想查看對(duì)象的值,這個(gè)時(shí)候,watch窗口中的變量是被禁用的,不能再查看(也不能更新),盡管對(duì)象仍然存在。你如果知道對(duì)象的地址,可以繼續(xù)充分地觀察它。你可以將地址轉(zhuǎn)換為該對(duì)象類型的指針,放在watch窗中。

下面的例子中,當(dāng)單步跳出do_foo()之后,_foo不能再被訪問。但是,將它的地址轉(zhuǎn)換為foo*后,就可以繼續(xù)觀察這個(gè)對(duì)象。

技巧4:查看數(shù)組的值

如果你在操作一個(gè)很大的數(shù)組(我們假設(shè)至少有幾百個(gè)元素吧,但是可能更少),在Watch窗口中展開數(shù)組,查找一些特定范圍內(nèi)的元素很麻煩,因?yàn)槟阋煌5貪L動(dòng).如果數(shù)組是分配在堆上的話,你甚至不能在watch窗口中展開數(shù)組元素.對(duì)此,有一個(gè)解決辦法。你可以使用(array+ offset>),count> 去查看從offset>位置開始的特定范圍的count>元素(當(dāng)然,這兒的數(shù)組是你的實(shí)際對(duì)象)。如果想查看整個(gè)數(shù)組,可以簡(jiǎn)單使用array,count>.

如果你的數(shù)組是在堆上,你可以在watch窗口中將它展開,但是要查看某個(gè)特定范圍的值,用法稍有不同:((T*) array + offset>),count>(注意這種用法對(duì)于堆上的多維數(shù)組也有效)。但是這種情況下,T是指數(shù)組元素的類型。

如果你在用MFC,并使用其中的'array'容器,像 CArray, CDWordArray,CStringArray等等。你當(dāng)然可以使用同樣的過濾方法。除此之外,你必須查看array的m_pData成員,它是保存數(shù)據(jù)的真實(shí)緩存。

技巧5:避免進(jìn)入不必要的函數(shù)

很多時(shí)候,你在調(diào)試代碼時(shí)可能會(huì)進(jìn)入到你想跳過的函數(shù),像構(gòu)造函數(shù),賦值操作或者其他的。其中最困擾我的是CString構(gòu)造函數(shù)。下面是一個(gè)例子,當(dāng)你準(zhǔn)備單步執(zhí)行take_a_string()函數(shù)時(shí),首先進(jìn)入到CString的構(gòu)造函數(shù)。

void take_a_string(CString const text){}void test_string(){ take_a_string(_T("sample"));}


幸運(yùn)的是可以告訴調(diào)試器去跳過哪些方法,類或者整個(gè)命名空間。實(shí)現(xiàn)它的方法也已經(jīng)改變了,回到使用VS6的日子,通常是通過autoexp.dat文件來指定的。Vistual Studio 2002改成了使用注冊(cè)表設(shè)置。想要跳過一些函數(shù),你需要在注冊(cè)表里添加一些值(詳情如下):

    實(shí)際位置取決于你使用的Vistual Studio版本和操作系統(tǒng)平臺(tái)(x86或x64,因?yàn)樽?cè)表只能在64位的Windows下瀏覽)值的名字是數(shù)字,代表規(guī)則的優(yōu)先級(jí);數(shù)字越大,優(yōu)先級(jí)越高。值數(shù)據(jù)是一個(gè)正則表達(dá)式的REG_SZ值,用于指定怎樣過濾和執(zhí)行。

為了避免進(jìn)入任何CString方法,我添加了下面的規(guī)則:

有了這個(gè),即使你強(qiáng)制進(jìn)入上例中的take_a_string(),調(diào)試器也會(huì)跳過CString的構(gòu)造函數(shù)。

更多閱讀:

  •  使用Visual C++調(diào)試器怎樣避免進(jìn)入函數(shù)
  • 使用AutoExp.dat調(diào)整調(diào)試器

技巧6:從代碼啟動(dòng)調(diào)試器 Launch the debugger from code

你可能很少需要將調(diào)試器附加到程序中,但你不能在Attach窗口這樣做(可能因?yàn)橹袛喟l(fā)生太快而沒有捕獲到),你也不能一開始就在調(diào)試器中啟動(dòng)程序。你可以在程序中產(chǎn)生中斷給調(diào)試器一個(gè)機(jī)會(huì)通過調(diào)用內(nèi)部的_degbugbreak()來附加。

復(fù)制代碼 代碼如下:

void break_for_debugging() {
__debugbreak();
}

實(shí)際上還有其他的方法來完成,例如觸發(fā)中斷3,但這僅僅適用于x86平臺(tái)(C++64位不再支持ASM)。另外還有DebugBreak()函數(shù),但它的使用不怎么簡(jiǎn)便,所以這里推薦使用內(nèi)部方法。

復(fù)制代碼 代碼如下:
__asm int 3;

   程序運(yùn)行內(nèi)部方法時(shí)會(huì)停止運(yùn)行,這時(shí)你就有機(jī)會(huì)將調(diào)試器附加到該進(jìn)程。

更多閱讀:

  •  內(nèi)部方法_debugbreak
  • 任何時(shí)候都離不開設(shè)置斷點(diǎn)和斷言
  • Visual Studio 20005/2008的調(diào)試,第四部分:為調(diào)試器設(shè)置代碼
技巧7:在output窗口打印

通過調(diào)用DebugOutputString可以在調(diào)試器的output窗口顯示一段特定的文本。如果沒有附加的調(diào)試器,該函數(shù)什么也不做。

更多閱讀:

  • 函數(shù)OutputDebugString
  • 函數(shù)OutputDebugString的調(diào)用機(jī)制
技巧8:隔離內(nèi)存泄漏

內(nèi)存泄漏是在原生開發(fā)中的一個(gè)很重要的問題,要檢測(cè)內(nèi)存泄漏是一個(gè)很嚴(yán)峻的挑戰(zhàn),尤其是在大型項(xiàng)目中。Vistual Studio可以提供檢測(cè)內(nèi)存泄漏的報(bào)告,還有其他的一些應(yīng)用程序(免費(fèi)的或商業(yè)的)也可以幫助你檢測(cè)內(nèi)存泄漏.有些情況下,在一些內(nèi)存分配最終會(huì)導(dǎo)致泄漏時(shí),可以使用調(diào)試器去中斷。但是你必須找到可再現(xiàn)的分配編號(hào)(盡管沒那么容易)。如果能做到這一點(diǎn),執(zhí)行程序時(shí)調(diào)試器才會(huì)中斷。

我們來看下面的代碼,分配了8個(gè)字節(jié),卻一直沒釋放分配的內(nèi)存。Visual Studio提供了造成內(nèi)存泄漏的對(duì)象的報(bào)告,多運(yùn)行幾次,會(huì)發(fā)現(xiàn)一直是同一個(gè)分配編號(hào)(341)。

復(fù)制代碼 代碼如下:

void leak_some_memory()
{
char* buffer = new char[8];
}
Dumping objects ->
d:\marius\vc++\debuggingdemos\debuggingdemos.cpp(103) : {341} normal block at 0x00F71F38, 8 bytes long.
Data: > CD CD CD CD CD CD CD CD


在一個(gè)特定的(可復(fù)現(xiàn)的)位置中斷的步驟如下:

確定你有足夠的關(guān)于內(nèi)存泄漏的報(bào)告模式(參考 使用CRT庫檢測(cè)內(nèi)存泄漏)
多次運(yùn)行程序直到你能在程序運(yùn)行結(jié)束后的內(nèi)存泄漏報(bào)告里找到一個(gè)可復(fù)現(xiàn)的分配編號(hào),例如上個(gè)例子中的(341)
在程序一開始的地方設(shè)置一個(gè)斷點(diǎn)以便你能夠盡早地進(jìn)行中斷。
當(dāng)最初的中斷發(fā)生時(shí),watch窗口的Name欄里會(huì)顯示:{,,msvcr90d.dll}_crtBreakAlloc,在Value欄里寫入你想要查找的位置編號(hào)
繼續(xù)調(diào)試(F5)
程序執(zhí)行到指定位置會(huì)停止,你可以使用調(diào)用棧被指引找到被該位置觸發(fā)的那段代碼。
遵循這些步驟, 在上個(gè)例子中,使用分配的編號(hào)(341)就可以識(shí)別內(nèi)存泄漏的起因。

技巧9:調(diào)試發(fā)行版

調(diào)試和發(fā)布是兩個(gè)不同的目的。調(diào)試配置是用于開發(fā)的,而發(fā)布配置,顧名思義,是用來作為程序的最終版本,因?yàn)樗仨殗?yán)格遵循發(fā)布的質(zhì)量要求,該配置包含優(yōu)化部分和調(diào)試版本的中斷調(diào)試的設(shè)置。而且,有時(shí)候,要像調(diào)試調(diào)試版本一樣去調(diào)試發(fā)行版。要做到這一點(diǎn),你需要在配置里做一些改變。但是這種情況下,你就不再是在調(diào)試發(fā)行版,而是調(diào)試和發(fā)行的混合版。

你還應(yīng)該做一些事兒,以下是必須要做的:

配置C/C++ >General>Debug Information Format 應(yīng)該為 “Program Database(/Zi)”
配置C/C++ >Optimization>Optimization 應(yīng)該為”Disabld(/Od)”
配置Linker>Debugging>Generate Debug Info 應(yīng)該為”Yes/(DEBUG)”
如圖所示:

更多閱讀:怎樣調(diào)試發(fā)行版

技巧10:遠(yuǎn)程調(diào)試

另一個(gè)重要的調(diào)試就是遠(yuǎn)程調(diào)試,這是一個(gè)更大的話題,多次被提到,這里我只做一下簡(jiǎn)單的概括:

你需要在遠(yuǎn)程機(jī)器上安裝遠(yuǎn)程調(diào)試監(jiān)控
遠(yuǎn)程調(diào)試監(jiān)控必須以管理員身份運(yùn)行,并且用戶必須屬于管理員組
在你運(yùn)行監(jiān)控時(shí),會(huì)開啟一個(gè)新的服務(wù),該服務(wù)的名字必須用Visual Studio的Attach to Progress窗口的Qualifier組合框的值。

  1. 遠(yuǎn)程和本地機(jī)器上的防火墻必須允許Visual Studio和遠(yuǎn)程調(diào)試監(jiān)控之間能夠通信
  2. 想要調(diào)試,PDB文件是關(guān)鍵;為了能夠讓VisualStudio自動(dòng)加載它們,必須滿足以下條件:

1)本地的PDB文件必須可用(在遠(yuǎn)程機(jī)器的相同路徑下放置一個(gè)對(duì)應(yīng)的模塊)。

 2) 遠(yuǎn)程機(jī)器上的托管PDB文化必須可用。

遠(yuǎn)程調(diào)試監(jiān)控下載:

  •  Visual Studio 2008 Service Pack 1 Remote Debugger
  • Microsoft Visual Studio 2010 Remote Debugger

更多閱讀:

  • 設(shè)置遠(yuǎn)程調(diào)試
  • 怎么運(yùn)行遠(yuǎn)程調(diào)試監(jiān)控
  • 遠(yuǎn)程調(diào)試時(shí)加載調(diào)試符號(hào):本地對(duì)托管
  • PDB文件:開發(fā)者須知
  • Visual Studio遠(yuǎn)程調(diào)試和PDB文件
  • 怎樣指定符號(hào)位置和加載行為
結(jié)束語

Ivan Shcherbakov那篇文章和我這篇文章提到的調(diào)試技巧,在大多數(shù)的調(diào)試問題中都是必不可少的。想要知道更多的關(guān)于調(diào)試技巧的知識(shí),建議閱讀文章中提供的額外閱讀。

原文鏈接: Marius Bancila   翻譯: 伯樂在線 - 伯樂在線讀者
譯文鏈接: http://blog.jobbole.com/45249/
您可能感興趣的文章:
  • 分享Visual Studio原生開發(fā)的10個(gè)調(diào)試技巧(2)
  • Visual Studio調(diào)試技巧匯總
  • 12個(gè)Visual Studio調(diào)試效率技巧(小結(jié))

標(biāo)簽:山西 嘉興 天門 通遼 泰州 牡丹江 景德鎮(zhèn) 巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《分享Visual Studio原生開發(fā)的10個(gè)調(diào)試技巧》,本文關(guān)鍵詞  分享,Visual,Studio,原生,開發(fā),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。

  • 相關(guān)文章
  • 下面列出與本文章《分享Visual Studio原生開發(fā)的10個(gè)調(diào)試技巧》相關(guān)的同類信息!
  • 本頁收集關(guān)于分享Visual Studio原生開發(fā)的10個(gè)調(diào)試技巧的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    这里只有精品99re| 亚洲午夜精品一区二区三区他趣| 日本不卡视频一二三区| 国产乱淫av麻豆国产免费| 日本韩国精品在线| 中文字幕中文字幕一区| 国产成人三级在线观看| 成人免费视频入口| 国产欧美在线观看一区| 国产一区二区三区黄视频 | 来吧亚洲综合网| 久久久电影一区二区三区| 极品美女销魂一区二区三区 | 国产激情视频网站| 欧美日韩高清影院| 亚洲一区成人在线| 亚洲国产精品第一页| 欧美日本一道本在线视频| 亚洲午夜精品久久久久久久久| 日韩精品――色哟哟| 欧美日韩大陆一区二区| 天堂成人免费av电影一区| 国产白嫩美女无套久久| 欧美刺激午夜性久久久久久久| 日本不卡的三区四区五区| 亚洲一级中文字幕| 久久精品人人爽人人爽| 成人高清在线视频| 在线一区二区视频| 亚洲一二三四区不卡| 国产污在线观看| 日韩欧美一级在线播放| 精品一区二区三区在线观看| 在线观看日本黄色| 亚洲欧美综合另类在线卡通| 91浏览器在线视频| 日韩丝袜情趣美女图片| 久久99精品国产| 久草视频手机在线| 一区二区三区色| 特级西西人体wwwww| 国产亚洲精品久| 99视频在线精品| 91精品国产欧美一区二区18 | 91麻豆精品国产91久久久更新时间| 日韩精彩视频在线观看| 精品一区二区6| 亚洲精品伦理在线| 香港三日本8a三级少妇三级99| 久久综合成人精品亚洲另类欧美| 成人免费视频播放| 欧美日韩高清一区二区不卡| 久久99精品久久久久久国产越南| 精品自拍偷拍视频| 午夜影院在线观看欧美| 亚洲色图 激情小说| 一区二区激情视频| 日韩成人短视频| 偷拍一区二区三区| 国产又粗又硬又长又爽| 亚洲电影激情视频网站| 国产午夜精品久久久久久久久| 亚洲人成影院在线观看| 深爱五月激情网| 日韩毛片视频在线看| 日本aaa视频| 亚洲欧洲av在线| 亚洲综合网在线观看| 亚洲视频一二三| 亚洲熟妇一区二区三区| 最新久久zyz资源站| 无码人妻精品一区二区三应用大全| 国产精品第五页| 一本色道综合久久欧美日韩精品 | 强迫凌虐淫辱の牝奴在线观看| 久久久99精品久久| 成人做爰69片免费| 欧美激情一区二区三区蜜桃视频| xxxwww国产| 中文字幕亚洲一区二区av在线 | 亚洲综合精品自拍| 蜜臀久久99精品久久久久久| 一区二区国产盗摄色噜噜| 色噜噜噜噜噜噜| 天天色图综合网| 在线免费观看日本欧美| 国产一区二区三区在线观看免费| 欧美精品在线一区二区| 成人免费va视频| 久久你懂得1024| 欧美极品jizzhd欧美仙踪林| 国产精品久久一卡二卡| 亚洲精品午夜视频| 婷婷国产v国产偷v亚洲高清| 色婷婷亚洲一区二区三区| 国产一区二区三区综合| 日韩久久久精品| 久久无码专区国产精品s| 国产精品久久久久久户外露出| 成年人在线免费看片| 日产国产高清一区二区三区| 欧美日韩免费观看一区三区| 成人av影视在线观看| 欧美激情综合五月色丁香| 国产熟妇久久777777| 天天综合网天天综合色| 欧美伊人久久大香线蕉综合69| 成人免费精品视频| 国产精品视频yy9299一区| 久操视频在线观看免费| 毛片av中文字幕一区二区| 8x8x8国产精品| 精人妻一区二区三区| 亚洲精品午夜久久久| 老妇女50岁三级| 成a人片亚洲日本久久| 中文字幕av一区二区三区| 欧美丰满老妇熟乱xxxxyyy| 久久不见久久见免费视频7 | 蜜桃av一区二区| 91精品国产91综合久久蜜臀| 国产日韩视频一区| 亚洲伊人色欲综合网| 欧美少妇性性性| 久久久久久久穴| 亚洲一二三四久久| 欧美久久久久中文字幕| jjzz黄色片| 天天免费综合色| 日韩亚洲欧美成人一区| 少妇饥渴放荡91麻豆| 免费久久99精品国产| 日韩无一区二区| 久操视频免费看| 精品一区二区三区在线观看国产| 久久精品网站免费观看| 国产精品国产三级国产传播| 成人午夜视频福利| 亚洲免费在线观看| 欧美视频在线观看一区二区| 亚洲av无码专区在线播放中文| 五月婷婷综合网| 日韩一本二本av| 日本人亚洲人jjzzjjz| 国产v日产∨综合v精品视频| 国产精品麻豆欧美日韩ww| www.色小姐com| 永久免费看片在线观看| 亚洲成人免费在线观看| 日韩欧美一区二区免费| 中文字幕欧美激情极品| 成人av影院在线| 亚洲一区二区黄色| 日韩精品一区二区三区swag| 欧美性受xxxx黑人| www.爱久久.com| 亚洲国产欧美日韩另类综合 | 国产又粗又猛又爽又黄的视频四季 | 超碰97人人干| 国产综合久久久久影院| 亚洲同性gay激情无套| 欧美人xxxx| 懂色av粉嫩av蜜乳av| 国产精品456露脸| 亚洲欧美日韩国产综合| 欧美精品在线视频| 日本猛少妇色xxxxx免费网站| 成人av在线影院| 三级亚洲高清视频| 国产日韩欧美麻豆| 在线观看亚洲精品视频| 性久久久久久久久久| 成人性视频免费网站| 亚洲成人黄色影院| 久久久亚洲国产美女国产盗摄 | 国产精品一线二线三线| 亚洲精品一二三| 精品动漫一区二区三区在线观看| 日韩一级片av| 黄色国产在线观看| 成人av一区二区三区| 日本sm残虐另类| 亚洲欧洲av在线| 欧美tickle裸体挠脚心vk| 日韩在线视频网址| 私密视频在线观看| 成人高清av在线| 欧美aa在线视频| 亚洲免费观看高清在线观看| 日韩精品中文字幕一区| 一本大道综合伊人精品热热| av在线网站观看| ass极品水嫩小美女ass| 狠狠色综合播放一区二区| 一区二区久久久久久| 国产欧美一区二区三区网站| 欧美一区二区三区免费在线看| 国产精品嫩草影院俄罗斯| 丰满少妇一区二区三区| 不卡的看片网站|