2017-09-17 3 views
4

난 그냥 이런 빈 양식의 consits 간단한 C# 응용 프로그램을 디버깅하는 WinDBG에서를 사용하여 중단 점을 삽입 할 수 없습니다 windbg를 선택한 다음에 windbg를 실행 :디버깅 .NET 응용 프로그램,

0:009> .cordll -ve -u -l 
Automatically loaded SOS Extension 
CLRDLL: Loaded DLL C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscordacwks.dll 
CLR DLL status: Loaded DLL C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscordacwks.dll 

을 그리고 테인 내가 SOS 확장을로드하고 확인 자사의로드 :

0:009> .loadby sos mscorwks 
0:009> .chain 
Extension DLL search Path: 
    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\WINXP;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\arcade;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\pri;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64;C:\Users\username\AppData\Local\Dbg\EngineExtensions;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\PuTTY\;C:\Program Files (x86)\Bitvise SSH Client;C:\Program Files\nodejs\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Git\cmd;C:\Users\username\AppData\Local\Android\sdk\platform-tools;C:\Program Files (x86)\Nox\bin\;C:\Users\username\AppData\Local\Microsoft\WindowsApps;C:\Users\username\AppData\Roaming\npm;C:\Program Files (x86)\Nmap;C:\Program Files (x86)\mitmproxy\bin 
Extension DLL chain: 
    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\sos: image 2.0.50727.8794, API 1.0.0, built Tue Jun 20 23:15:41 2017 
     [path: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\SOS.dll] 
    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\SOS.dll: image 2.0.50727.8794, API 1.0.0, built Tue Jun 20 23:15:41 2017 
     [path: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\SOS.dll] 
    dbghelp: image 10.0.15063.468, API 10.0.6, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbghelp.dll] 
    ext: image 10.0.15063.468, API 1.0.0, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\ext.dll] 
    exts: image 10.0.15063.468, API 1.0.0, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\WINXP\exts.dll] 
    uext: image 10.0.15063.468, API 1.0.0, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\uext.dll] 
    ntsdexts: image 10.0.15063.468, API 1.0.0, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\WINXP\ntsdexts.dll] 

그런 다음 .pdb이있는 폴더와 소스 폴더에 디버깅 기호 경로를 설정합니다.

하지만 난 소스 파일을 열고 난 windbg를에 오류가 프로세스를 계속 다음 소스 라인에 중단 점을 설정하고 때 나는 그것이 휴식 것이 예상

0:009> g 
Unable to insert breakpoint 3 at 00000000`008f001a, Win32 error 0n998 
    "Invalid access to memory." 
bp3 at 00000000`008f001a failed 
WaitForEvent failed 

, 그리고 나에게 .net 어셈블러를 보여 하지만 항상 실패합니다. windbg를 사용하여 .net 응용 프로그램을 중단시키는 방법은 무엇입니까?

+1

좋은 질문이지만 가장 중요한 부분이 누락되었습니다. 어떻게 중단 점을 설정 했습니까? –

+0

@ThomasWeller 나는 windbg 메뉴를 열었습니다.'File' selected'Open Source File'이'Form1.cs'을 열었습니다. 소스 파일에서'InitializeComponent();'에 커서를 놓고 F9를 누릅니다. 줄이 빨갛게되므로 중단 점이 배치 된 것 같습니다. – YakibutaRamen

답변

5

F9을 소스 파일에 사용하여 .NET에서 중단 점을 설정할 수 없습니다. 대신 SOS !bpmd 또는 SOSEX!mbp 명령이 필요합니다.

조난 신호 구문은

!BPMD <module name> <method name> 
!BPMD -md <MethodDesc> 

이며 줄 번호를 사용할 수 없습니다.

SOSEX 구문은

!sosex.mbp <source file> <line number> [<column number>] [Options] 

이며, PDB의 사용할 수있는 경우 줄 번호를 사용할 수 있습니다.

!mbc은 관리되는 중단 점을 지 웁니다. !mbd은 관리되는 중단 점을 비활성화하고 !mbl은 관리되는 중단 점을 나열합니다. !bpmd은 메서드가 이미 JIT 컴파일 된 경우에만 작동하므로 실행 컴퓨터 코드에 중단 점을 설정할 수 있습니다. !mbp은 메소드가 JIT 컴파일되지 않았더라도 중단 점을 설정할 수 있습니다. 메소드가 컴파일 되 자마자 중단 점을 설정합니다.

+0

!! bpmd는 아직 JIT 컴파일되지 않은 메소드에 해결되지 않은 중단 점을 설정할 수도 있습니다. '! bpmd module MyClass.MyFunc' 또는'! bpmd -md '와 같이 입력하십시오. –