日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

你知道怎么使用DebugView查看调试信息吗?

發布時間:2023/12/4 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你知道怎么使用DebugView查看调试信息吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

DebugView是sysinternals工具集中的一款用來查看調試信息的工具。不管你是內核開發人員還是應用程序開發人員,都會用到這款神器。先簡單看看DebugView可以干什么吧。

  • 可以查看應用程序輸出的調試信息。

  • 可以查看驅動程序輸出的調試信息。

  • 可以查看本地機器的調試信息。

  • 可以查看遠程機器的調試信息。

  • 可以根據規則高亮顯示

  • 可以根據關鍵字過濾

  • 可以根據關鍵字搜索

  • 可以自動顯示最新一條記錄。

  • ……

功能太多太全了,有木有?心動了嗎?快跟我一起來了解下這個神器吧。

如何輸出調試信息

應用程序和驅動程序都可以通過對應的API生成調試信息。

  • 非托管應用程序可以通過Win32 API OutputDebugString()輸出調試信息。

  • 托管應用程序可以通過System.Diagnostics.Debug.Print()輸出調試信息,內部會調用OutputDebugString()。

  • 驅動程序可以通過DbgPrint()或DbgPrintEx()(或者使用KdPrint或KdPrintEx宏)輸出調試信息。這兩個宏在Debug版里會分別映射到DbgPrint()或DbgPrintEx(),在Release版會映射為空。

下圖是一個使用DebugView捕獲C++程序和C#程序輸出的調試信息的截屏。

示例

基本功能

DebugView有一些值得我們了解的功能,下面列舉了一些我用到的功能。

  • Options -> Show milliseconds 可以精確到毫秒,默認精確到秒。

  • Options -> Clock time (快捷鍵 CTRL + T),可以切換時間顯示方式。

    有時候我們希望知道兩條調試信息的時間差(估算某段代碼的執行效率的時候),有時候我們希望知道某條調試信息具體的時間點,可以按CTRL + T快速切換。

    switch clocktime
  • Edit -> Filter/Highlight...可以過濾/高亮符合條件的記錄。

    • 不相關的調試信息太多,看不過來怎么辦?過濾功能可以幫助我們排除無用的調試信息。

    • 所有記錄都是黑白的,區分起來太費勁,關鍵調試信息不夠醒目。怎么辦?高亮功能可以高亮顯示包含特定關鍵字的調試信息。

點開下面的視頻感受下吧!

過濾/高亮功能

  • 使用File -> New Window...可以快速啟動DebugView的新實例。如果你需要監聽多臺機器的調試信息,此功能可能對你有用。

  • 使用Computer -> Connect...可以監視遠程計算機的調試信息。

    監視遠程機器的調試日志

使用此功能,需要注意以下事項:

    • 遠端機器上必須以代理模式運行DebugView。可以通過dbgview.exe /a啟動代理模式。更多選項,請參考DebugView的幫助文檔,或者運行dbgView.exe -h查看。

    • 以代理模式運行的DebugView會監聽TCP 2020端口,注意設置防火墻的例外規則。

    • DebugView可以同時連接并監視多臺遠程計算機。可以通過Computer->Disconnect來斷開與某臺計算機的連接。

    • 當前連接的機器名會在標題欄顯示,注意看標題欄。

  • 不要讓多個DebugView同時監聽同一臺機器的調試信息,否則會導致調試信息分別發送到不同的DebugView中,對我們排錯產生不必要的干擾!

  • dbgView.exe -h可以查看DebugView支持的命令行參數及簡短介紹。

    命令行選項
  • 其它

    • F1打開幫助文檔。

    • CTRL + F查找符合條件的調試信息。

    • F3查看下一條查找到的記錄。

    • CTRL + C復制選中的記錄。

    • CTRL + S保存調試信息到文件中。

    • CTRL + X清空所有的調試信息。

    • CTRL + A開啟或關閉自動滾屏。

    • ……

  • 更多功能,請參考《Windows Sysinternals 實戰指南》。

如果遇到DebugView不能捕獲調試信息的情況,可以從以下幾個方面排查:

問題及解決方法

  • 如果應用程序正在被調試,那么DebugView捕獲不到該程序的調試信息,請到調試器的輸出窗口查看。具體原理可以參考張銀奎老師的《軟件調試》。

    DebugView捕獲不到"C# Debug Message!"
  • 是否勾選了對應的捕獲選項。有時候最簡單的反而是最容易被我們忽略的。

    捕獲選項
  • 檢查當前的DebugView實例的連接狀態,注意看標題欄。

    通過標題欄查看連接狀態
  • 在win10系統中,無法捕獲驅動程序輸出的調試信息。

    首先,捕獲驅動程序的調試信息,需要管理員權限,如果沒有管理員權限,會報下圖中的錯誤:

    需要管理員權限

其次,從Vista開始,需要設置注冊表才能捕獲。另存下面代碼為Debug Print Filter.reg,雙擊導入注冊表后,重啟生效。

Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter] "DEFAULT"=dword:0000000f

注冊表對應的內容如下圖所示:

具體原因請參考 http://www.osronline.com/article.cfm%5eid=295.htm,為了方便大家,我截取了該網址的內容:

  • 退出DebugView后,再次運行DebugView捕獲內核調試信息會報下圖中的錯誤:

    unable to access dbgv.sys

    從提示看,應該是Dbgv.sys被占用了。使用Process monitor查看DebugView的文件讀寫記錄,印證了我們的猜測。

    dbgview-createfile-failed-event

本想通過process explorer的Find Handle or DLL功能來查看是哪個進程在占用,未果!使用其它工具也沒搜到相關信息。如果有哪位朋友知道如何查看驅動文件(*.sys)的占用情況,請告訴我!

no-search-result-of-dbgv

在網上搜到解決方案:只需要重命名Dbgv.sys即可。參考網址:https://www.cnblogs.com/jiaochen/p/5581440.html

說明: 這應該是老版本的一個bug,我在微軟官網上下載最新的4.9版本的DebugView后,沒有此問題了。建議大家下載最新版的DebugView使用。

廣而告之

關于OutputDebugString()的實現原理,可以參考 張銀奎老師的 《軟件調試》(第一版)第10章 10.7節 輸出調試字符串。《軟件調試》這本調試領域的扛鼎之作不用我多做介紹吧?買就對了!不過第一版已經絕版了,好消息是:《軟件調試》(第二版)卷 1:硬件基礎 已經出版了。而且聽張老師說,年底的時候, 《軟件調試》(第二版)卷 2 有望出版(不過看這意思,2019年應該沒戲了,希望2020年上半年能等到),對調試感興趣的朋友有福了,多多關注下吧。

對了,張老師也有公眾號的,大家可以搜索格友關注。

總結

  • 使用OutputDebugString()可以方便的輸出調試信息。如果你還沒在你的程序里加上調試信息的話,快快加上吧。注意不要把敏感信息輸出來,別人用工具可以方便的查看到。切記!

  • DebugView是調試的好幫手。過濾和高亮功能可以讓我們更加有效的查看我們關心的調試信息。

  • 《軟件調試》詳細講述了OutputDebugString()的實現原理,感興趣的小伙伴兒一定要看啊!

參考資料

  • 《Windows Sysinternals 實戰指南》

  • 《軟件調試》

  • OSR: Getting DbgPrint Output To Appear In Vista and Later[1]

  • dbgview 在 windows 10 中關閉后再次打開時無法 "capture kernel"[2]

References:

[1] OSR: Getting DbgPrint Output To Appear In Vista and Later:?

http://www.osronline.com/article.cfm%5eid=295.htm

[2] dbgview 在 windows 10 中關閉后再次打開時無法 "capture kernel":?

https://www.cnblogs.com/jiaochen/p/5581440.html

歡迎留言交流

總結

以上是生活随笔為你收集整理的你知道怎么使用DebugView查看调试信息吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。