青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 319, comments - 22, trackbacks - 0, articles - 11
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

VC調試器高級應用----高級斷點篇

Posted on 2011-08-12 23:37 RTY 閱讀(563) 評論(0)  編輯 收藏 引用 所屬分類: C/C++Windows
VC調試器高級應用----高級斷點篇

VC調試器高級應用----高級斷點篇

.高級斷點語法  
 
高級斷點語法由兩部分組成:1.上下文部分.2.位置,表達式,變量或Windows消息條件

用函數,源文件和二進制模塊來指定上下文,上下文的表示方法

{[函數],[源文件],[二進制模塊]}   

必須指定唯一的,足夠的上下文信息才能獲取斷點位置.如在TEST.CPP20行設一位置斷點,語法為:{,TEST.CPP,}.20,A.DLLB.DLL都使用了該行,又只想在B.DLL的調用中觸發,則必須使用:{,TEST.CPP,B.DLL}.20. 

VC調試器中可直接輸入上下文語法:Breakpoints對話框的Location選項卡BreakAt編輯框中.更容易的方法是使用BreatAt框右的箭頭打開菜單,選擇Advanced,然后在Context框中輸入斷點的相應信息

如想在一個絕對地址上中斷,直接在BreakAt框中輸入地址就行

.任何函數上快速中斷  
 
將函數名輸入BreadAt框中.如果是C++代碼,同時還需要類限定符.支持重載了的函數,調試器會列出所有滿足條件的函數供選擇,如輸入時提供足夠的信息,完全可略過選擇過程.如輸入:"CString::operator=(const  char  *)"可唯一確定要中斷的函數.  
 
.在系統或DLL輸出的函數中設置斷點  
 
在程序中從DLL輸入的函數中設置一個斷點可能是毫無作用的,調試器需要知道在何處可以找到該函數上下文信息,同時,函數名取決于是否加載了DLL的符號.只有在W2K以上版本中才能在系統DLL中設置斷點--原因在于其它系統沒有提供邊寫入邊復制保護的功能,若一定要啟用這種方法,必須要有COFF(Common  Object  File  Format),并在調試器中輸出啟動的裝載----Options對話框的Debug,Load  COFF  &  Exports選中

VC調試器用分級的符號信息法,完整的符號的級別高于不太完整的.PDB(Program  Database)文件具有所有可能的源碼行,函數,變量和類型信息,優先級便高于COFF/DBG文件,后者只有公用函數符號,COFF/DBG文件高于輸出名稱,輸入的名稱是一種偽符號.  
調試時,DEBUG窗口輸出:裝載DLL的符號,則說明符號已被裝入;否則說明沒有裝載DLL的符號

沒有裝入符號時,使用的位置字符串是DLL輸出的名稱,可能用DUMPBIN程序查看這個名稱:DUMPBIN  /EXPORTS  DLLname.:LoadLibraryA中設置中斷:"{,,Kernel32.dll}LoadLibraryA". 

如裝入了符號,則要根據輸出函數和調用協議來計算函數名.如上例,LoadLibraryA使用__stdcall調用協議,據該協議,函數名以下劃線為前綴,所跟有進棧的字節數為后綴的@.一般說來,參數個數*4,就是參數占用棧空間的總字節數,LoadLibary的名稱便是:_LoadLibraryA@4,故最后的語法是:"{,,Kernel32.dll}_LoadLibraryA@4"  
 
:常用的調用協議 

     1__stdcall調用約定相當于16位動態庫中經常使用的PASCAL調用約定。在32位的VC++5.0PASCAL調用約定不再被支持(實際上它已被定義為__stdcall。除了__pascal外,__fortran__syscall也不被支持),取而代之的是__stdcall調用約定。兩者實質上是一致的,即函數的參數自右向左通過棧傳遞,被調用的函數在返回前清理傳送參數的內存棧,但不同的是函數名的修飾部分(關于函數名的修飾部分在后面將詳細說明)。 

       _stdcallPascal程序的缺省調用方式,通常用于Win32  Api中,函數采用從右到左的壓棧方式,自己在退出時清空堆棧。VC將函數編譯后會在函數名前面加上下劃線前綴,在函數名后加上"@"和參數的字節數。 

       2C調用約定(即用__cdecl關鍵字說明)按從右至左的順序壓參數入棧,由調用者把參數彈出棧。對于傳送參數的內存棧是由調用者來維護的(正因為如此,實現可變參數的函數只能使用該調用約定)。另外,在函數名修飾約定方面也有所不同。 

       _cdeclCC++程序的缺省調用方式。每一個調用它的函數都包含清空堆棧的代碼,所以產生的可執行文件大小會比調用_stdcall函數的大。函數采用從右到左的壓棧方式。VC將函數編譯后會在函數名前面加上下劃線前綴。是MFC缺省調用約定。 

3__fastcall調用約定是如其名,它的主要特點就是快,因為它是通過寄存器來傳送參數的(實際上,它用ECXEDX傳送前兩個雙字(DWORD)或更小的參數,剩下的參數仍舊自右向左壓棧傳送,被調用的函數在返回前清理傳送參數的內存棧),在函數名修飾約定方面,它和前兩者均不同。 

       _fastcall方式的函數采用寄存器傳遞參數,VC將函數編譯后會在函數名前面加上"@"前綴,在函數名后加上"@"和參數的字節數。         

       4thiscall僅僅應用于“C++”成員函數。this指針存放于CX寄存器,參數從右到左壓。thiscall不是關鍵詞,因此不能被程序員指定。 

       5naked  call采用1-4的調用約定時,如果必要的話,進入函數時編譯器會產生代碼來保存ESIEDIEBXEBP寄存器,退出函數時則產生代碼恢復這些寄存器的內容。naked  call不產生這樣的代碼。naked  call不是類型修飾符,故必須和_declspec共同使用。 

       關鍵字  __stdcall__cdecl__fastcall可以直接加在要輸出的函數前,也可以在編譯環境的Setting...C/C++  Code  Generation項選擇。當加在輸出函數前的關鍵字與編譯環境中的選擇不同時,直接加在輸出函數前的關鍵字有效。它們對應的命令行參數分別為/Gz/Gd/Gr。缺省狀態為/Gd,即__cdecl 

       要完全模仿PASCAL調用約定首先必須使用__stdcall調用約定,至于函數名修飾約定,可以通過其它方法模仿。還有一個值得一提的是WINAPI宏,Windows.h支持該宏,它可以將出函數翻譯成適當的調用約定,在WIN32中,它被定義為__stdcall。使用WINAPI宏可以創建自己的APIs  
 
.位置斷點修飾符  
 
1.
跳躍計數

功能是執行斷點但不在斷點處停止,直到執行完了一個特定的次數為止

使用中首先設置一個標準的位置斷點,打開BreadPoint對話框,選中該斷點,單擊Condition,然后在彈出的對話框最下面的編輯控件中輸入次數

只有當程序全速運行時,未執行的循環次數才有用.單步執行跨過斷點時不會更新跳躍計數

:已知循環可能崩潰,但不清楚在哪次循環時,輸入遠遠大于總循環次數的跳躍計數修飾符,則在崩潰時可打開Breakpoint,其中將列出還未執行的循環次數,與總次數相減就可得已執行的次數.  
 
2.
條件表達式

只有表達式為真時觸發.BreakpointCondition按鈕,選第一個編輯框,輸入表達式即可.規則

.只可使用C類型比較運算符.  
.
表達式中不能調用任何函數.  
.
表達式中不能包含任何宏值

表達式為@TIB=Thread  Infomation  Block  Linear  Address,則程序只在該特定線程中才會中斷.:線程@TIB地址值為0E000,則輸入"@TIB==0xE000",則在切換到該線程時中斷.W98,可用@FS=thread  specific  value. 

如在某特定錯誤后中斷,則可用@ERR,"@ERR=2"表示在最后錯誤為ERROR_FILE_NOT_FOUND.@CLK,所有可在WATCH窗口中使用的偽寄存器均可用于條件表達式.  
 
條件表達式可與跳躍斷點組合使用.  
 
3.
變量更改 

在變量更改時中斷程序.只有當位置斷點執行時才能檢查變量.常用用調用棧高層的函數中發現出錯,需要深入調用棧,壓縮范圍找出根源時

添加時在Breakpoint框第一個編輯框中輸入變量名(可以是指針指向聽對象:*p),在第二個編輯框中輸入要查看的項目數量.  
 
.全局表達式和條件斷點.  
 
調試器可監控某一地址和該地址上的1,24字節的內容.如可用硬件調試寄存器,則不影響速度;否則程序將單步執行ASM指令并在每一步中檢查條件,這將嚴重影響程序運行速度

總共有4個調試寄存器.硬件調試寄存器不能處理超過1個雙字長的引用.確保利用硬件調試寄存器的最好方法是使用表達式和數據更改位置的實際地址值.例如:g_szGlobal是全局數組指針,地址為0x5000,則在Breakpoint對話框中DATA選項卡中將表達式斷點設為"*(char*))0x5000=='G'",但如果寫為"WO(0x5000)=='G',則用不到硬件調試寄存器,會單步執行每條指令

與全局表達式斷點類似,使用變量的16進制地址給定長指針計算地址,并將要查看的單元數設為1,則全局變量斷點可發揮最付佳功效.如上例要在變量改動時中斷,則輸入:"*(long*)0x5000".  
 
.WINDOWS消息斷點.  
 
Breakpoint
框的Message.需要指定一個窗口過程,注意:MFC世界中AfxWndProc是多數窗口的一個窗口過程,所以總會在該斷

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品99久久香蕉国产色戒| 久久久精品tv| 亚洲美女精品一区| 久久久五月婷婷| 亚洲欧美日韩国产中文| 欧美先锋影音| 亚洲一品av免费观看| 亚洲三级免费| 欧美福利在线| 亚洲精品欧美| 亚洲欧洲午夜| 欧美日韩精品国产| 宅男精品视频| 亚洲香蕉网站| 国产精品自拍网站| 欧美影院一区| 久久成人免费日本黄色| 狠狠色伊人亚洲综合网站色| 美女视频网站黄色亚洲| 免费亚洲一区二区| 午夜精品久久久久久久白皮肤 | 精品成人一区| 一本大道久久a久久精二百| 欧美大色视频| 欧美色图一区二区三区| 性欧美xxxx大乳国产app| 欧美一级在线播放| 亚洲男女自偷自拍图片另类| 99国产精品久久久久久久成人热 | 一区二区不卡在线视频 午夜欧美不卡在 | 洋洋av久久久久久久一区| 欧美性大战xxxxx久久久| 亚洲婷婷在线| 亚洲欧美制服另类日韩| 一色屋精品视频在线观看网站| 免费观看久久久4p| 欧美久久影院| 久久精品91久久久久久再现| 久久综合网络一区二区| 一区二区三区蜜桃网| 亚洲欧美日韩精品久久| 亚洲高清在线观看| 一本大道久久精品懂色aⅴ| 国产欧美日韩在线观看| 欧美激情在线有限公司| 国产精品va在线播放| 六月婷婷久久| 国产精品嫩草影院av蜜臀| 久久一区激情| 欧美午夜精品| 欧美激情一级片一区二区| 国产精品免费视频观看| 欧美黄色网络| 国产亚洲欧美另类一区二区三区| 亚洲电影免费观看高清完整版| 欧美日韩一区二区精品| 久久久午夜视频| 国产精品国产亚洲精品看不卡15| 久久午夜视频| 国产精品免费视频xxxx| 亚洲国产精品黑人久久久| 国产日韩一区二区| 一本久道久久综合中文字幕| 尤物yw午夜国产精品视频明星| 日韩视频三区| 亚洲乱码国产乱码精品精天堂| 亚洲人成亚洲人成在线观看| 亚洲欧美另类久久久精品2019| 国产亚洲欧美aaaa| 一区二区三区福利| 亚洲毛片av| 巨乳诱惑日韩免费av| 久久精品视频99| 欧美午夜精品久久久| 亚洲国产精品成人| 伊人久久综合97精品| 午夜一区二区三视频在线观看| 日韩午夜免费视频| 久久夜色精品国产亚洲aⅴ| 欧美一区二区性| 欧美色图一区二区三区| 一本高清dvd不卡在线观看| 亚洲精品一区二区三区在线观看 | 欧美一区成人| 亚久久调教视频| 国产精品国产三级国产aⅴ入口| 亚洲国产精选| 亚洲精品视频免费| 欧美国产极速在线| 亚洲国产乱码最新视频| 亚洲人久久久| 欧美日韩国产经典色站一区二区三区 | 国产综合激情| 欧美午夜精品久久久| 欧美激情视频一区二区三区免费| 亚洲女优在线| 欧美亚洲在线播放| 欧美亚洲自偷自偷| 欧美一级夜夜爽| 六月婷婷一区| 国产专区欧美专区| 欧美一区二区三区在线视频| 欧美一区二区女人| 国产精品午夜电影| 午夜久久久久久| 老巨人导航500精品| 亚洲电影激情视频网站| 久久综合久久综合这里只有精品| 久久在线视频在线| 亚洲国产婷婷| 欧美日韩一区二区三区在线视频 | 99视频一区二区三区| 亚洲一二三级电影| 国产性色一区二区| 久久国产欧美日韩精品| 久久高清福利视频| 精品不卡一区| 欧美激情第1页| 夜色激情一区二区| 亚洲欧美精品伊人久久| 久久精品99| 亚洲人体影院| 国产精品你懂的在线| 欧美一区二区三区四区在线观看地址| 欧美中文字幕视频| 亚洲一线二线三线久久久| 午夜精品久久| 中文在线资源观看视频网站免费不卡| 99国产一区| 久久综合国产精品| 国产精品外国| 亚洲午夜在线| 亚洲精品久久久久久一区二区| 亚洲男人第一av网站| 欧美三区美女| 日韩一区二区电影网| 欧美在线91| 日韩午夜一区| 国产一区二区三区免费不卡| 可以看av的网站久久看| 一区二区三区毛片| 女人香蕉久久**毛片精品| 亚洲一区二区免费视频| 亚洲第一主播视频| 国产视频一区欧美| 欧美老女人xx| 久久综合给合| 欧美一区二区三区在线视频| 一级日韩一区在线观看| 亚洲国产小视频| 久久人体大胆视频| 欧美一级大片在线观看| 在线一区观看| 99re热精品| 亚洲人妖在线| 亚洲成人在线视频播放| 国产一区二区高清不卡| 欧美午夜精品理论片a级按摩| 牛牛国产精品| 久久手机精品视频| 香蕉久久久久久久av网站| 一区二区三区产品免费精品久久75| 亚洲第一中文字幕| 欧美大片va欧美在线播放| 久久综合99re88久久爱| 欧美自拍偷拍| 久久精品系列| 久久久免费av| 久久久久久国产精品mv| 欧美一区二区三区精品| 亚洲综合999| 亚洲综合色在线| 亚洲一区二区三区四区在线观看 | 欧美激情一区二区三区全黄| 久久亚洲国产精品一区二区| 久久精品国产清高在天天线| 久久se精品一区精品二区| 久久国产精品亚洲va麻豆| 欧美专区在线| 久久女同精品一区二区| 国产精品一二一区| 欧美有码在线视频| 久久精品国产精品亚洲精品| 欧美一区二区视频在线观看2020| 亚洲午夜一区二区三区| 午夜精品福利电影| 久久久国产成人精品| 久久免费的精品国产v∧| 久久五月激情| 美女主播精品视频一二三四| 美女成人午夜| 欧美成人免费网站| 欧美日韩亚洲网| 国产精品美女久久久久久2018| 国产欧美一区二区精品性| 国产一区二区三区观看| 亚洲福利免费| 一区二区三区四区精品| 欧美一区二区三区啪啪| 蜜桃av一区二区|