• <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>
                 今天QA發現在他一臺機器上啟動我們的軟件的時會提示某個DLL(a.dll)找不到(a.dll是b.dll內部用到的一個DLL, 我們軟件直接用的是b.dll)。 

                剛開始我們懷疑是不是a.dll沒有下載下來或是沒有下載完整,但是到安裝目錄下看了,a.dll在那邊,用dependency看了下,DLL的導出函數也都是正常的。既然DLL本身沒有問題,那就是搜索路徑的問題了,可以修改的搜索路徑一般包括當前路徑(current directory)和DLL路徑(dll directory), 正好我們這2項在我們的Trace中都有記錄。通過查看Trace,發現dll directory在后面確實被修改成了我們另外一個軟件的路徑。

                那么究竟是誰改了這個路徑? 這就需要借助Windbg了。我們知道修改DLL路徑的API是SetDllDirectory,所以我們可以通過設置API斷點,然后查看堆棧就可以了。因為我們這個程序這里是由其他程序調用啟動的,所以我們可以通過子進程的方式來調試。

                在QA的機器上安裝windbg, 首先將Windbg Attach到父進程,輸入命令 .childdbg 1, 表示允許調試子進程,然后F5,繼續運行。接下來觸發父進程創建子進程的動作,我們可以看到Windbg會中斷下來, 我們可以通過命令|. 查看是不是我們的目標進程建立起來了,接下來輸入斷點命令bp Kernel32!SetDllDirectoryA 和 bp Kernel32!SetDllDirectoryW, 然后F5運行。果然很快Windbg又被中斷下來了,通過命令kv查看堆棧,我們可以看到果然有人調用SetDllDirectoryA,原來是我們的底層通訊模塊觸發的, 另外我們可以通過da poi(esp+4)查看SetDllDirectory傳入路徑的值。

                 那么是不是只要我們把DLL路徑改回原來的NULL,就不會有這個Bug了呢?我們可以在調用SetDllDirectory中斷時,直接輸入ed esp+4 0修改傳入參數成0,然后F5運行,果然后面dll的加載就都正常了。

                找到原因后,接下來就是讓QA給對應的模塊開發人員報Bug,讓他們把DLL路徑用完后改回來。
                
                可以看到無論對于開發還是測試人員,windbg很多時候可以幫我們快速的定位問題, 如果借助符號文件,Windbg完全可以實現比VC IDE更強大的調試供功能, 并且有時候我們不需要源代碼,不需要重新編譯,直接就可以通過windbg調試和解決問題。
            posted on 2012-06-26 20:33 Richard Wei 閱讀(3696) 評論(3)  編輯 收藏 引用 所屬分類: windbg

            FeedBack:
            # re: 用Windbg解決一個Bug
            2012-06-27 13:06 | zgpxgame
            mark  回復  更多評論
              
            # re: 用Windbg解決一個Bug
            2012-07-01 00:40 | 朱峰everettjf
            這得需要專業的測試人員了。

            最近遇到個類似的默認路徑被改變的問題。CFileDialog。  回復  更多評論
              
            # re: 用Windbg解決一個Bug
            2012-07-08 02:16 | weolar
            其實vs這些功能都.調試的時候,在"debug"里調出commandline窗口,就能下這些命令了.只是windbg比vs多了些擴展命令.  回復  更多評論
              
            # re: 用Windbg解決一個Bug
            2012-07-08 10:08 | Richard Wei
            @weolar
            是的, 理論上Vc和Windbg用的是相同的的調試引擎,但是我試了些VC的command,設置斷點的bp和察看堆棧的kv都不支持,不知道怎么回事。
            另外windbg本身很小,在QA機器上安裝也很方便。  回復  更多評論
              
            久久婷婷色香五月综合激情| 久久久无码精品亚洲日韩蜜臀浪潮 | 久久久久这里只有精品| 久久国产精品视频| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲色大成网站WWW久久九九| 国产亚洲精品久久久久秋霞| 粉嫩小泬无遮挡久久久久久| 久久久久黑人强伦姧人妻| 久久久久久国产精品美女| jizzjizz国产精品久久| 欧美日韩精品久久久久| 久久精品无码专区免费东京热| 伊人久久综在合线亚洲2019| 精品久久久久久无码不卡| 色噜噜狠狠先锋影音久久| 久久久久亚洲AV成人网人人网站| 精品精品国产自在久久高清| 伊人情人综合成人久久网小说| 精品人妻久久久久久888| 欧美无乱码久久久免费午夜一区二区三区中文字幕| 亚洲精品视频久久久| 国产国产成人精品久久| 久久精品国产99久久久古代 | 久久一日本道色综合久久| 久久久久国产精品麻豆AR影院 | 99久久精品国产高清一区二区| 综合久久一区二区三区 | 无遮挡粉嫩小泬久久久久久久| 国产免费久久精品99久久| 久久夜色精品国产噜噜噜亚洲AV| 久久久久亚洲精品男人的天堂| 99久久99这里只有免费的精品| 国产精品久久久香蕉| 久久一区二区三区免费| 久久精品国产99久久香蕉| 色偷偷888欧美精品久久久| 青青草原1769久久免费播放| 久久国产精品99精品国产| 久久综合综合久久综合| 久久久噜噜噜久久熟女AA片|