摘要:2. livekd 需要內核文件的調試符號的支持。1. 使用 livekd 進行本地內核調試,需要管理員權限,沒以管理員權限運行會給出對應的錯誤提示。

說明:本文很早就發佈在我的博客上了,當時總結的有些問題,本次重新整理完善後再次發佈。

前言

有時候我們非常想知道當前系統內核的一些狀態,比如查看當前系統加載了哪些驅動,查看某個進程外 COM 調用卡在哪裏了,等等。如果我們可以調試系統內核,或者抓取一個系統轉儲來做事後調試,該多好啊。我們可以通過如下方法得到系統轉儲:

1. 雙機內核調試(需要另外一臺機器來做雙機調試)

2. 讓系統崩潰(可以使用 sysinternals 中的 notmyfault 或者 使用快捷鍵讓系統崩潰,並設置 系統崩潰的時候自動保存轉儲文件)(有點小題大作了)。

3.  使用 sysinternals 中的 livekd ,不需要特殊設置,綠色環保。

以上幾種方案中,使用 livekd 最方便快捷。如果有哪位小夥伴兒對其它幾種方法感興趣,可以查看之前的轉儲系列文章。爲了能順利使用 livekd ,我們需要解決幾個問題。

使用幫助

  1. 可以運行 livekd -? 來查看使用方法。
  • 通過 -k 來指定 kd.exe 的路徑。
  • -m
    windbg
    kd.exe
    
  • 可以傳遞參數給 kd.exe 或者 windbg.exe

問題總結

1. 使用 livekd 進行本地內核調試,需要管理員權限,沒以管理員權限運行會給出對應的錯誤提示。

2. livekd 需要內核文件的調試符號的支持。 可以通過環境變量 _NT_SYMBOL_PATH 來告訴 livekd 到哪裏加載調試符號。 如果沒設置也沒關係, livekd 會自動下載需要的調試符號到某個位置,遇到下圖的情況,輸入 y 即可。

  • 也可以通過命令行參數 -y 來指定符號路徑。與使用 _NT_SYMBOL_PATH 效果一樣。最好設置環境變量 _NT_SYMBOL_PATH ,對所有調試器都有用。

  • 我本地的設置爲: _NT_SYMBOL_PATH=SRV*C:\mssymbols\*http://msdl.microsoft.com/download/symbols

3. livekd 需要內核調試器( kd.exe windbg.exe )的支持,可以通過命令行參數 -k 指定 kd.exe 的完整路徑。 通過 -k 參數指定 kd.exe 的路徑的時候,如果有空格,需要用 "" 包起來,否則可能報如下錯誤:

4. 下載符號文件需要 symsrv.dlldbghelp.dll 的支持,請確保 livekd 可以順利加載這兩個文件。 如果出現上圖中的錯誤,請按照提示加上 -vsym 再次運行,可以查看到更詳細的問題。我這裏是因爲不能加載 symsrv.dll 導致的。

5. 如果以上都已經設置正確,但還是報錯,可以使用 -vsym 參數查看具體的錯誤提示。因爲最近微軟符號服務器在國內連接有點困難。所以大概率會遇到下面的問題。

livekd-can-not-find-nt-kernel-symbol

遇到這個問題,沒有什麼好的解決辦法。只能想辦法連上微軟符號服務器,或者先下載一份對應的文件,放到對應的查找路徑下。

說明:

  • kd.exe
    livekd.exe
    64
    64
    livekd.exe
    kd.exe
    symsrv.dll
    livekd.exe
    kd.exe
    symsrv.dll
    
  • 如果還是找不到依賴的文件,我們可以把依賴的文件拷貝到 livekd.exe 同目錄下再運行。

6. 如果以上幾步設置好了,運行 livekd 應該沒問題了。剩下的就是通過 livekd -? 來熟悉用法了,祝各位好運。貼一張正常運行的效果圖。

說明:如果之前沒加載過符號文件的話,可能會花一定的時間加載符號。請耐心等待。

總結

  • livekd 可以非常方便的獲取一份系統轉儲,不用預先做任何設置,真是太有用了。

  • -vsym 可謂是排查 livekd 不能正常工作的首要選項。遇到問題,加上它就對了。

  • 調試符號對於調試是極其重要的。

猜你喜歡:

轉儲文件系列:

轉儲文件知多少

你需要知道的 N 種抓取 dump 的工具

你生成的轉儲文件有問題嗎?

向大廠看齊!爲自己的程序增加自動轉儲的功能!

內核轉儲,開抓啦!

藍屏(BSOD)轉儲設置,看本文就夠了!

系統藍屏的幾種姿勢,確定不瞭解下麼?

本地內核調試環境搭建,就這麼簡單!

雙機內核調試 101

使用 VMware + win10 + VirtualKD + windbg 從零搭建雙機內核調試環境

調試系列:

調試實戰——你知道怎麼使用DebugView查看調試信息嗎?

調試實戰——程序CPU佔用率飆升,你知道如何快速定位嗎?

調試實戰——崩潰在ComFriendlyWaitMtaThreadProc

調試實戰——使用windbg調試崩潰在ole32!CStdMarshal::DisconnectSrvIPIDs

調試實戰——調試PInvoke導致的內存破壞

調試實戰——調試excel啓動時死鎖

調試實戰——調試DLL卸載時的死鎖

調試實戰——調試TerminateThread導致的死鎖

排錯系列:

排錯實戰——1分鐘解救 run 不出來的 Autoruns

排錯實戰——VS清空最近打開的工程記錄

排錯實戰——拯救加載調試符號失敗的IDA

排錯實戰——你知道拖動窗口時只顯示虛框怎麼設置嗎?

排錯實戰——解決Tekla通過.tsep安裝插件失敗的問題

排錯實戰——使用process explorer替換任務管理器

排錯實戰——通過對比分析sysinternals事件修復程序功能異常

VS 系列:

排錯實戰——解決c++編譯錯誤:error C2059: illegal token on right side of '::'

善用 vs 中的錯誤列表和輸出窗口,高效查找 C++ 多工程編譯錯誤

歡迎留言交流!

相關文章