• <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>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            符號文件——Windows 應(yīng)用程序調(diào)試必備

            一、何謂符號文件?

              符號文件(Symbol Files)是一個數(shù)據(jù)信息文件,它包含了應(yīng)用程序二進制文件(比如:EXEDLL等)調(diào)試信息,專門用來作調(diào)試之用,最終生成的可執(zhí)行文件在運行時并不需要這個符號文件,但你的程序中所有的變量信息都記錄在這個文件中。所以調(diào)試應(yīng)用程序時,這個文件是非常重要的。用 Visual C++ WinDbg 調(diào)試程序時都要用到這個文件。
              在 Windows 系統(tǒng)中,符號文件以 .pdb 為擴展名,比如:每個 Windows 操作系統(tǒng)下有一個 GDI32.dll 文件,編譯器在編譯該 DLL 的時候會產(chǎn)生一個 GDI32.pdb 文件,一旦你擁有了這個 PDB 文件,那么便可以用它來調(diào)試并跟蹤到 GDI32.dll 內(nèi)部。該文件和二進制文件的編譯版本密切相關(guān),比如修改了 DLL 的輸出函數(shù),再編譯該 DLL,那么原先的 PDB 文件就過時了,不能再用老的 PDB 文件來做調(diào)試工作,而必須使用最新的 PDB 文件版本。
              Visual C++ 編譯代碼后會在 Debug 或者 Release 目錄下生成一個 PDB 文件。一般情況下,符號文件包括以下的數(shù)據(jù)信息:

            1. 全局變量(Global variables);
            2. 局部變量(Local variables);
            3. 函數(shù)名和它們的入口地址(Function names and the addresses of their entry points);
            4. FPO 數(shù)據(jù)(Frame Pointer Omission)Frame Pointer 是一種用來在調(diào)用堆棧(Call stack)中找到下一個將要被調(diào)用的函數(shù)的數(shù)據(jù)結(jié)構(gòu)源代碼的行序號(Source-line numbers);

            二、如何得到和安裝符號文件?

            1. 先確定你的操作系統(tǒng)(OS)版本;
            2. 到微軟網(wǎng)站下載相應(yīng)的符號文件;
            3. 安裝符號文件,對于符號文件的安裝位置沒有特貝要求,可以安裝在任何目錄中;
            4. 設(shè)置環(huán)境變量,使得調(diào)試工具(比如:Visual C++WinDbgNtsdDrWatson 等)能找到符號文件;

            安裝符號文件的注意事項:

              如果是手動安裝符號文件,有一點很重要,那就是宿主機(Hostt Computer)上的符號文件必須與目標機器(Target Computer)上的 Windows 版本相匹配。
              這里所謂的宿主機指的是運行調(diào)試會話的機器,在典型的雙系統(tǒng)調(diào)試會話環(huán)境中,宿主機可以是連接到目標機器的任何機器。目標機器指的是發(fā)生軟件組件、系統(tǒng)服務(wù)、應(yīng)用程序或操作系統(tǒng)運行失敗的機器。也即是需要被調(diào)試的機器,它是調(diào)試會話關(guān)注的焦點。目標機器可以近在咫尺,也可以位于完全不同的地方。有時我們也將目標機器稱之為——被調(diào)試者(debuggee),那么與之對應(yīng),宿主機則可以稱為調(diào)試者(debugger)。

            三、在 Visual C++ 使用符號文件的方法

            Visual C++ 6.0 中的使用方法:

            1. 打開 Visual C++ 6.0 Workspace 文件(*.dsw);
            2. 進入 Tools 菜單,選擇 Options 菜單項 (Tools->Options)
            3. 單擊 Directoties 標簽;
            4. “Show directories for”下拉列表中選擇 “Executable files”
            5. 將符號文件的路徑添加到 “Directories” 路徑列表中;
            6. 單擊  OK 完成;

            Visual C++ .NET 2003 中的使用方法:

            1. 打開 Visual C++ .NET 的項目文件(*.vcproj);
            2. 在解決方案管理器中選中要使用符號文件的項目;
            3. 單擊右鍵進入項目屬性對話框;
            4. 選擇配置屬性中的調(diào)試
            5. 在與調(diào)試對應(yīng)的操作選項中有一個符號路徑,在此添加符號文件的路徑即可;
            6. 單擊  “確定完成;

            四、如何產(chǎn)生 Release 版本二進制文件對應(yīng)的 PDB 文件?

            Visual C++ 6.0 中的方法:

            1. 打開 Visual C++ 6.0 Workspace 文件(*.dsw);
            2. 進入 Project 菜單,選擇 Settings 菜單項 (Project->Settings),打開項目設(shè)置對話框;
            3. “Settings for”列表中選擇項目的 Release 配置;
            4. 單擊“C/C++”標簽;
            5. “Category”下拉列表框中選擇“General”選項;
            6. “Debug info”下拉列表框中選擇調(diào)試信息格式(具體選項參見圖一),在此不必禁用任何優(yōu)化選項;
            7. 單擊“Link”標簽;
            8. “Category”下拉列表框中選擇“Debug”選項;
            9. 選中“Debug info”復選框,然后選擇需要的鏈接調(diào)試類型(具體選項參見圖一);
            10. 不要選擇“Separate types”復選框;
            11. “Project options”編輯框的最后添加如下指令:/opt:ref,icf
            12. 重新生成(Rebuild)項目;

            Visual C++ .NET 2003 中的方法:

            1. 打開 Visual C++ .NET 的項目文件(*.vcproj);
            2. 進入 Project 菜單,選擇 Settings 菜單項 (Project->Settings),打開項目設(shè)置對話框;
            3. 配置下拉列表中選擇項目的(活動)Release” 配置;
            4. 選擇配置屬性樹型節(jié)點中的“C/C++” ==常規(guī)
            5. 設(shè)置右邊的調(diào)試信息格式選項(具體選項參見圖一);
            6. 選擇配置屬性樹型節(jié)點中的鏈接器”==調(diào)試
            7. 設(shè)置右邊的生成程序數(shù)據(jù)庫文件(具體選項參見圖一);
            8. 選擇配置屬性樹型節(jié)點中的鏈接器”==命令行
            9. 附加選項(D)”編輯框中添加如下指令:/opt:ref,icf
            10. 確定退出;
            11. 重新生成(Rebuild)項目;

            clip_image001

            圖一

            五、關(guān)于 Free Build(也稱 Retail Build)和 Checked Build(也稱 Debug Build

            每個基于 NT 操作系統(tǒng)有兩種不同的程序生成模式,即:

            • Free Build ( Retail Build)
            • Checked Build ( Debug Build)

              Free Build 生成的是最終用戶版本,針對生成的二進制文件進行了徹底的優(yōu)化,禁用了調(diào)試斷言,并剝離了調(diào)試信息。這樣一來使可執(zhí)行程序文件更小,加載更快,使用的內(nèi)存也更小。
              Checked Build 生成的是測試和調(diào)試版本。它包含額外的 Free Build 所沒有的錯誤檢查,參數(shù)驗證和調(diào)試信息,Checked Build 有助于隔離和跟蹤可能導致不可預(yù)見的行為的問題,比如內(nèi)存溢出,不正確的設(shè)備配置。雖然 Checked Build 提供了額外的保護,但與 Free Build 比較,它需要更多的內(nèi)存開銷和磁盤空間。由于可執(zhí)行程序包含符號調(diào)試信息;調(diào)試時要執(zhí)行附加的代碼、參數(shù)檢查和輸出調(diào)試診斷信息,從而導致性能下降。

            六、系統(tǒng)符號文件的更新方法

              系統(tǒng)符號文件指 Windows 操作系統(tǒng)依賴的那幾個重要的 DLL/SYS 和可執(zhí)行文件對應(yīng)的符號文件,常見的比如:gdi32.dllKernel32.dllKerberos.dllpsapi.dlluser32.dll等,使用 WinDbg 調(diào)試時,你就會發(fā)現(xiàn)系統(tǒng)符號文件(PDB)有多重要,這些文件都與本地的 OS 密切相關(guān),比如,Windows 2000 打了SP補丁的話,那么必須更新系統(tǒng)符號文件才能進行相關(guān)調(diào)試,原來的符號文件與打補丁后的系統(tǒng)就會不匹配,怎么辦呢? 可以通過網(wǎng)絡(luò)來更新!象下面這樣在 WinDbg Symbols Path 里面輸入路徑:

            SRV*D:\Symbols\websymbols*http://msdl.microsoft.com/download/symbols

            (斜體部分是你在本地保存符號文件的路徑)

              如果你不是通過代理上網(wǎng),那么在你用 WinDbg 打開一個被調(diào)試程序后,輸入 symchk 回車,WinDbg 就會自動的連到微軟的網(wǎng)站根據(jù)你的機器的情況更新的 PDB 文件,并將它保存在上面斜體部分指定的本地路徑里,這樣你就可以確保你的符號文件版本和你機器上的文件版本一致。

            如果你是通過代理上網(wǎng)那么你需要配置 IE 的連接設(shè)置。具體方法恕不贅言

             

            posted on 2011-05-10 11:02 肥仔 閱讀(711) 評論(0)  編輯 收藏 引用 所屬分類: 調(diào)試

            国产成人久久777777| 人妻无码久久一区二区三区免费 | 久久久久九九精品影院| 久久国产精品免费一区| 一级女性全黄久久生活片免费 | 99久久免费只有精品国产| 久久国产精品偷99| 亚洲综合日韩久久成人AV| 久久精品一区二区国产| 亚洲人成无码网站久久99热国产 | 一本久久a久久精品综合香蕉 | 久久超乳爆乳中文字幕| 久久国产三级无码一区二区| 久久久久久久久久久精品尤物| 久久午夜电影网| 国产精品久久久久久五月尺| 天天爽天天爽天天片a久久网| 99久久香蕉国产线看观香| 亚洲综合精品香蕉久久网97| 久久久久久精品成人免费图片| 国产成人精品综合久久久| 久久久噜噜噜www成人网| 久久亚洲日韩看片无码| 久久精品人妻一区二区三区| 久久国产精品久久精品国产| 亚洲色大成网站WWW久久九九| 人人狠狠综合久久亚洲| 国产视频久久| 久久久91人妻无码精品蜜桃HD| 久久99精品久久久久久hb无码| 一本色综合网久久| 亚洲国产精品无码久久久蜜芽| 女人高潮久久久叫人喷水| 久久亚洲精品无码播放| 国产国产成人久久精品| 91精品国产高清久久久久久91| 国产精品久久久久天天影视| 久久ww精品w免费人成| 97久久超碰国产精品旧版| 国产成人久久AV免费| 久久亚洲国产午夜精品理论片|