當我在目標上通過windbg -k
管ntsd -d
時,我無法使源代碼在windbg中顯示,但它在我本地調試時起作用。如何通過ntsd -d在windbg中顯示源代碼?
我想調試Winlogon.exe和LSASS.exe的第一個代碼執行。但是,可以很容易複製的問題,我做了這個設置:
- 我用的是CrashMe sample application,帶源和預建的符號,複製到C:\ CrashMe目標和主機
- 兩我使用Windows調試工具(DTW)6.12.0002.633版本。
- 目標是運行Windows XP SP3,主機Windows 7的終極。
- 每臺機器上的路徑和設置都是相同的:DTW路徑和crashme路徑。
- 我總是使用完全合格的路徑(如c:\ dtw \ ntsd.exe)。
- 我運行在一個虛擬機中的XP,用
/noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200
我能夠用這個命令,由C發起本地調試啓動:\ CrashMe:
windbg -g -G -srcpath C:\CrashMe -y C:\CrashMe debug\CrashMe.exe
我可以啓動Windows XP虛擬機並用此命令連接到它:
windbg -n -k com:pipe,port=\\.\pipe\com_1,reconnect -srcpath SRV*;C:\CrashMe -y
c:\windows\system32;c:\windows\symbols;C:\CrashMe\debug
但我需要調試遠程機器。在目標,我有以下選擇:
- 調試通過
-server
和-remote
- 在運行過程
- 使用圖像文件執行選項(IFEO)斷裂。
在每個選項中,我都可以看到符號(x crashme!*
)。
我不能使用#1(-server
)或#2(breakin.exe <pid>
),因爲我想調試身份驗證提供的啓動代碼,所以我需要ntsd -d
下LSASS.exe
開始。我不能讓它運行並在以後加入。
我的理解是我需要使用IFEO。使用gflags.exe,而不是手動修改註冊表的,我設置可執行選項
c:\dtw\ntsd -d -G -lines -x -y c:\symcache;c:\windows\system32 -n -srcpath C:\CrashMe\
- 我可以唱到的應用程序,但我的斷點設置是從不打。
- 我可以
.open
任何文件,但我不能使用該文件來設置斷點。 - 我可以x(檢查)任何符號
- 我看不到源代碼。
如何查看我在ntsd -d
到windbg -k
下運行的進程的DLL源代碼?
我仍然沒有找到答案,但它可能與ntsd沒有關係一個圖形調試器? – ixe013 2012-01-21 02:11:20
在相關說明中,在完全相同的設置下,我可以用windbg中的完整源代碼調試內核驅動程序。 – ixe013 2012-01-21 02:12:04
如果你可以調試一個驅動程序,你已經有一個連接,也可以用來調試用戶模式代碼(即你的應用程序)。 – 0xC0000022L 2012-03-29 01:37:29