DebuggingToolsforWindows源碼模式調試如果可以分析源代碼而不是反匯編二進制代碼,調試程序會更加容易一些。當源代" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

WinDbg 源碼模式調試

系統 2037 0

Debugging Tools for Windows

源碼模式調試

如果可以分析源代碼而不是反匯編二進制代碼,調試程序會更加容易一些。

當源代碼是 C C++ 或匯編語言時, WinDbg CDB KD 可以在調試中使用它們。

編譯的要求

要進行源碼調試,必須讓編譯器或鏈接器在構建二進制文件時生成符號文件 ( .pdb 文件 ) 。這些符號文件保存了二進制指令和源碼行之間的對應關系。

另外,調試器必須能夠訪問源碼文件,因為符號文件中并不包含實際的源代碼文本。

如果這些都滿足,編譯器和鏈接器還不能對代碼進行優化。如果代碼經過優化,在源碼調試時訪問局部變量會變得很困難,有時候幾乎是不可能的。如果使用 Build 實用程序作為編譯器和鏈接器,可以將 MSC_OPTIMIZATION 宏設置為 /Od /Oi 來避免優化。

定位符號文件和源碼文件

在源碼模式下調試,調試器必須能夠找到源碼文件和符號文件。更多信息,查看 設置路徑和加載文件

開始源碼調試

只要調試器擁有當前被調試線程的正確的符號和源碼文件,就可以顯示源碼信息。

如果使用調試器啟動一個新的用戶模式程序,在 Ntdll.dll 加載程序時初始斷點就會觸發。由于調試器不能訪問 Ntdll.dll 的源碼文件,所以這時不能訪問應用程序的源碼信息。

要將程序計數器移動到程序的開始位置,可以在二進制代碼入口點設置斷點。在 調試器命令窗口 輸入下面的命令。

bp?main
g

之后,程序會被加載起來并在進入 main 函數時停止。 ( 當然,可以使用任何入口點,而不僅僅是 main )

如果程序拋出一個異常,它會中斷到調試器中。這時源碼信息是可用的。但是,如果通過 CTRL+C CTRL+BREAK Debug?|?Break 命令來中斷,調試器創建了一個新線程,所以不能看到源代碼。

當到達具有源碼文件的線程時,在調試器命令窗口中就可以執行源碼調試命令了。如果使用 WinDbg Source 窗口 會出現。如果已經通過點擊 File 菜單的 Open Source File 打開了源碼窗口,

WinDbg GUI 中進行源碼調試

如果使用 WinDbg ,當程序計數器運行到調試器擁有源碼信息的代碼時,一個源碼窗口會出現。

WinDbg 為用戶或它自己打開的每個源文件顯示一個源碼窗口。關于該窗口的文本屬性的更多信息,查看 Source 窗口

之后可以單步執行程序、執行到斷點或執行到光標。關于單步和跟蹤命令的更多信息,查看 控制目標

源碼模式調試時,如果單步執行程序,合適的源碼窗口會移動到前臺。因為應用程序執行中也會調用到一些 Microsoft Windows 函數,這時調試器可能會將 反匯編窗口 移 到前臺 ( 因為調試器不能訪問這些函數的源碼 ) 。當程序計數器又返回到已知的源碼文件,相關的源碼窗口又會被激活。控制應用程序執行時, WinDbg 將源碼 窗口和匯編窗口中所在的位置用綠色高亮。設置了斷點的行為紅色 ( 啟用的斷點 ) 、黃色 ( 禁用的斷點 ) 或紫色 ( 如果當前程序計數器是斷點位置 ) 。源代碼會根據 對語言的分析進行著色。如果已經選中了源碼窗口,則可以將鼠標移動到符號上來查看它的值。關于這些特性的信息以及如何控制它們,查看 Source 窗口

WinDbg 中激活源碼調試,可以使用 L+t 命令、點擊 Debug 菜單的 Source Mode 或在工具欄點擊 Source mode on 按鈕 ( )

源碼模式激活時,狀態欄的 ASM 指示器會變為灰色。

源碼模式下單步執行某個函數時,可以查看或修改它的任何局部變量的值。更多信息,查看 讀寫內存

調試器命令窗口中的源碼調試

如果使用 CDB ,則沒有單獨的源碼窗口。但是,在單步執行源碼時還是可以查看運行的情況。

使用 CDB 源碼調試之前,必須通過 .lines?(Toggle Source Line Support) 命令加載源碼行符號,或者使用 -lines 命令行選項 啟動調試器。

如果使用了 l l+t 命令,則每次單步執行一行源碼。使用 L-t 來一次執行一條匯編指令。如果使用 WinDbg ,該命令和選中或清除 Debug 菜單上的 Source Mode 或使用工具欄菜單的效果一樣。

? l+s 命令在提示符顯示當前的代碼行和行號。如果只想顯示行號,使用 l+l

如果使用 l+o l+s ,在單步執行時只會顯示源碼行。程序計數器、匯編碼和寄存器信息都不會顯示。這種顯示類型使得可以快速通過源碼來單步調試而不會看到除了源碼之外的東西。

lsp?(Set Number of Source Lines) 命令來指定單步或者執行程序時顯示的源碼行數。

下面的命令序列是一種單步執行源碼文件的有效方式。

.lines???????? 啟用源碼行信息
bp?main???????
設置初始斷點
l+t???????????
按源碼行進行單步
l+s???????????
命令窗口中顯示源碼行
g?????????????
運行程序,直到 "main" 函數
pr????????????
執行一行源碼,并將寄存器切換為不顯示
p?????????????
執行一行源碼 ?

因為 ENTER 會重復最后一條命令,所以現在可以通過 ENTER 鍵來單步調試程序了。每一步都會有源碼行、內存偏移和匯編代碼顯示出來。

關于反匯編顯示的更多信息,查看 匯編模式調試

當顯示匯編代碼時,在每行右邊末尾會顯示出任何訪問到的內存位置。用 d* (Display Memory) e* (Enter Values) 命令來查看或修改這些位置的值。

如果需要查看每條匯編代碼來確認偏移或內存信息,使用 l-t 來以匯編指令單步而不是用源碼。源碼行信息仍然可以顯示出來。每行源碼和一條或多條匯編指令對應。

所有這些命令在 WinDbg CDB 中都可用。可以使用這些命令來在 WinDbg 調試器命令窗口 查看源碼,而不是在源碼窗口中。

源碼行和偏移

使用表達式求值器來確定和指定源碼行關聯的偏移位置也可以進行源碼調試。

下面的命令顯示一個內存偏移。

??` [[ module ! ] filename ][ : linenumber ] ` ?

如果省略 filename ,調試器會搜索和當前程序計數器位置符合的代碼。

不管當前使用的基數是什么,如果沒有添加 0x 前綴,調試器認為 linenumber 10 進制數。如果省略了 linenumber ,表達式的值為和源碼文件關聯的可執行文件初始地址。

CDB 中只有在使用了 .lines 命令或 -lines 命令行選項來加載源碼行符號時才能識別該語法。

該技術非常有用,因為不管當前的程序計數器指向什么地方都可以使用。例如,可以使用下面這樣的命令來預先設置斷點。

bp?`source.c:31`?

更多信息,查看 源碼行語法 使用斷點

源碼模式下的單步和跟蹤

以源碼模式調試時,單行代碼種可能有多個函數調用。不能使用 p t 來分開這些調用。

例如,在下面的命令中, t 命令會單步進入 GetTickCount printf ,而 p 命令會單步步過兩個調用。

printf(?"%x\n",?GetTickCount()?);

如果在跟蹤進入其他調用時想步過某個調用,用 .step_filter (Set Step Filter) 來指定步過哪些調用。

可以使用 _step_filter 來跳過框架函數 ( 例如,對微軟基本類庫 (Microsoft Foundation Classes,MFC) 或活動模板庫 (ATL) 的調用 )


??2008?Microsoft Corporation
Send feedback on this topic
Debugging Tools for Windows
August 24, 2008
翻譯:NetRoc

Build machine: CAPEBUILD

WinDbg 源碼模式調試


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品视频在线观看免费 | 在线观看免费情网站大全 | 久久国产精品老人性 | 国产成人久久精品 | 欧美激情在线视频播放 | 国内久久精品视频 | 伊在人亚洲香蕉精品区麻豆 | 超级碰碰青草免费视频92 | 国产一区二区免费在线观看 | 超高清欧美videos360 | 香蕉网站在线 | 亚洲天堂不卡 | 99久久精品国产一区二区成人 | 亚洲欧美在线中文字幕不卡 | 亚洲国产爱久久全部精品 | 欧美成人午夜视频在线观看 | 一级毛片视屏 | 日本国产精品 | 天天干天天干天天天天天天爽 | 久热视线观看免费视频 | 午夜影院免费体验区 | 亚洲欧美成人中文在线网站 | 前田香织一区二区中文字幕 | 久久草在线视频播放 | 国产一区二区在线看 | 久草不卡视频 | 国产精品亚洲精品爽爽 | 成人欧美一区二区三区黑人 | 国产91久久精品 | 免费看一级欧美毛片视频 | 欧美一区二区高清 | 国产亚洲免费观看 | 亚洲一区在线免费 | 亚洲高清一区二区三区久久 | 色综合中文字幕在线亚洲 | 国产成人一区二区三区免费观看 | 乱色专区 | 成人网欧美亚洲影视图片 | 国模极品一区二区三区 | 日韩伊人网| 91久久国产综合精品女同国语 |