• <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>
            隨筆 - 132  文章 - 51  trackbacks - 0
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(7)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            cocos2d-x

            OGRE

            OPenGL

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            假設
            int *block;
            在watch窗口查看block,看到的是block的地址
            用block[0],只能看到一個值
            可以用   block,10    來同時查看多個值
            用(&block[2]),6 可以查看block[2]到[7]

            watch窗口語法規則
            一.格式化數據和表達式賦值語句.
              
            常用變量格式化符(表達式的值后跟逗號,接格式化符,如"(int)0xFFFF,d"):
            d,I:有符號的十進制數.
            u     :無符號的十進制數.
            o     :無符號的八
            x,X:十六進制數.
            l,h:d,i,u,o,x,X的長前綴或短前綴.
            f     :有符號浮點數.
            e     :有符號的科學計數法.
            g     :有符號的浮點或有符號的科學計數法,用其中較短的一個.
            c     :單字符.
            s     :字符串.
            su   :雙字節字符串.
            st   :雙字節字符串或ANSI字符串,取決于AUTOEXP.DAT中的Unicode   String設置.
            hr   :Windows類標記.
            wm   :Windows消息碼.
              
            常用內存轉儲對象的格式化符(用法同變量格式化符):
            ma   :64個ASCII碼字符.
            m     :以16進制書寫的16字節,后跟16個ASCII字符.
            mb   :以16進制書寫的16字節,后跟16個ASCII字符.
            mw   :8個字長.
            md   :4個雙精度字.
            mq   :4個四倍字長的字.
            mu   :2字節字符(Unicode標準).
            #     :將指針擴展到指定的數值數目的內存存儲單元上.(#代表一個數字)
              
            WATCH窗口允許重新設置數據變量的格式,
            如:可用BY,DW表達式來定位指針的偏移量;
            可用&和*運算符,且兩運算符都可直接操作內存地址;
            甚至可用上下說明符明確指定變量的上下文.
            總之,所有格式化方法和指定方法在WATCH窗口都有效
              
            WATCH窗口是一個完整的表達式求值程序,可以在其中查看任何條件語句.
              
            表達式中可用的偽寄存器(可當普通變量進行查看):
            @ERR:最后一個錯誤值,GetLastError   API返回相同的值.
            @TIB:當前線程的線程信息塊.(調試器不能處理"FS:0"格式). 
            @CLK:時鐘寄存器.
            @EAX,@EBX,@ECX,@EDX,@ESI,@EDI,@DIP,@ESP,@EBP,@EFL
                      :Intel   CPU寄存器.
            @CS,@DS,@ES,@SS,@FS,@GS
                      :Intel   CPU段寄存器.
            @ST0,@ST1,@ST2,@ST3,@ST4,@ST5,@ST6,@ST7
                      :Intel   CPU浮點寄存器.
              
            二.適時編碼
              
            許多時候只想對兩斷點間的執行時間有個大致印象,可用@CLK得出兩斷點間所需執行時間(包括調試器占用的時間).
            需要輸入兩個@CLK觀察符,第一個是@CLK,第二個是@CLK=0.第二個的目的是重新運行時將定時器清0.
            時間以微秒為單位,大多數情況下需要格式化為毫秒:"@CLK/1000,d".
              
            三.在WATCH窗口中調用函數
              
            大多數情況下用于執行專門編寫的校驗數據結構,保證數據的相關性的函數.在釋放構件中,從未調用過的函數不會被鏈接,因此不必擔心這類函數會對影響發布構件.
            如函數沒有參數,也要求使用括號"()",調用時像用普通函數一樣傳送參數.WATCH右邊將顯示函數返回值.
            這里有些限制:
            1.只能在一個單線程上下文中執行函數.如是多線程程序,將函數輸入到WATCH窗口中檢查結果后應立即從WATCH窗口清除,否則,如調試函數在第二個線程上下文中執行,會立即終止第二個線程的運行.
            2.調試函數必須在20秒內執行.如執行過程中出現異常,程序會在調試器中中止.
            3.(常識)只對數據驗證進行內存讀取,如有問題,調用OutputDebugString類的函數.如更改內存或調用API函數----盡管這是可能的,但無法預知可能會發生什么.
            只要在WATCH窗口中重新計算表達式,已輸入WATCH窗口的調試函數就會執行:
            .程序處于運行狀態并觸發某一斷點時.
            .單步調試某一代碼行或某一指令時.
            .在WATCH窗口左邊編輯完成調試函數的文本并按下回車時.
            .在運行程序時出現異常情況,并讓你返回調試器中時.
            使用調試函數的建議:輸入調試函數并查看值后,立即從WATCH窗口清除;只為最關鍵的數據結構編寫調試函數;不要更改個別結構的轉儲內像.
              
            四.自動擴展自己的類型
              
            常見的自動擴展是RECT,輸入RECT型的變量后直接顯示其中的某些數據成員的值.
            自定義類型擴展時,只需將自己的類型入口加入<VS   Common>\MSDev98\Bin目錄的AUTOEXP.DAT文件中.
            例:
            擴展CreateProcess()所用到的PROCESS_INFORMATION結構
            1.檢查調試器將該類型識別為什么.將PROCESS_INFORMATION變量輸入WATCH窗口,右擊變量,選擇Properties,在這里它被標注為_PROCESS_INFORMATION類型.
            2.打開AUTOEXP.DAT文本文件,加入擴展入口.語法如下:
            Type=[text]<member[format]>
            本例中要查看hProcess和hThread值,故輸入:
            _PROCESS_INFORMATION=hProcess=<hProcess,X>   hThread=<hThread,X>
            其中X表示以16進制查看.有個特殊的格式化符<,t>,用于通知調試器輸入最易派生類型的類型名.如B派生至A,只有B有自動擴展規則,則B的自動擴展將會是后面跟隨著類A的自動擴展規則的類型名B.
              
            五.Set   Next   Statement命令
              
            可以在調試時從菜單運行,但也可在WATCH窗口中直接設置EIP寄存器----小心,可能很容易摧毀程序.在最優化的釋放構件中,最安全的方法是在Disassembly窗口中使用該命令.如代碼在堆棧上創建了臨時變量,更要多加小心.
            最 常用的情況是:在出問題的函數前設置一個斷點,檢查進入的參數,單步調試整個函數;如問題不是重復的,使用Set   Next   Statement設置返回到斷點的執行點,并更改參數.這樣可在一個調試會話中測試多個假設,節省測試時間,但它不能用于所有場合,因為函數執行會破壞 其狀態.
            另一個常用地點是測試時填充數據結構,如表和數組,可用它輸入額外的數據并查看代碼如何處理--當某些數據條件難于復制時更為方便.

            轉載自:

            http://hi.baidu.com/yacper/blog/item/d4ace923495df35a9822edd8.html

            posted on 2010-05-20 10:00 風輕云淡 閱讀(1334) 評論(0)  編輯 收藏 引用 所屬分類: VC
            伊人久久大香线蕉无码麻豆| 伊人久久大香线蕉精品不卡| 伊人色综合久久天天人守人婷| 狠狠人妻久久久久久综合| 久久噜噜电影你懂的| 欧美激情精品久久久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国産精品久久久久久久| 色偷偷88欧美精品久久久| 亚洲中文字幕无码一久久区| 久久久久亚洲国产| 久久精品无码一区二区三区日韩 | 久久夜色精品国产噜噜噜亚洲AV| 久久综合综合久久狠狠狠97色88| 久久青青草原综合伊人| 一本色道久久88综合日韩精品| 日韩精品久久久肉伦网站 | 精品少妇人妻av无码久久| 日本久久中文字幕| 久久久国产乱子伦精品作者| 伊人久久精品无码二区麻豆| 久久免费线看线看| 亚洲欧美日韩久久精品第一区| 久久精品视频一| 精品欧美一区二区三区久久久| 老色鬼久久亚洲AV综合| 久久天天躁夜夜躁狠狠| 无码任你躁久久久久久老妇App| 伊人色综合九久久天天蜜桃 | 日韩AV无码久久一区二区| 久久久午夜精品| 2021国内久久精品| 亚洲精品午夜国产va久久| 久久91精品综合国产首页| 久久中文娱乐网| 久久久精品一区二区三区| 国产69精品久久久久777| 国产精品成人99久久久久| 91精品国产高清久久久久久国产嫩草 | 精品久久久无码人妻中文字幕豆芽| 18禁黄久久久AAA片|