2012-02-01 537 views
3

我正在調試WinDbg作爲我的驗屍調試程序崩潰的程序。我在地址77f7f571設置了一個斷點。當它觸發時,我曾經得到如下:我如何刪除WinDbg中的斷點ntdll!DbgBreakPoint + 0x1

*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\System32\ntdll.dll - 
ntdll!DbgBreakPoint+0x1: 

然後我跟着從http://www.osronline.com/ShowThread.cfm?link=178221的指示,現在我只是得到

ntdll!DbgBreakPoint+0x1: 

我想刪除這個斷點,但我不能沒有讓它列出或刪除。有沒有輸出BL,也不是爲BC或BD:

0:002> bl 
0:002> bc * 
0:002> bd * 
+0

這是一個硬編碼斷點,而不是調試器斷點。有人稱之爲「DebugBreak」,意思是「強行進入調試器」。 – 2012-02-01 17:01:23

+0

我是新創建的虛擬機上唯一的一個,所以就是我做了我所做的任何事情。我很確定我用bp 77f7f571添加了這個,然後我導致了Access Violation,並且崩潰的程序啓動了調試器。 – user1183185 2012-02-01 17:05:57

+0

現在我知道你的意思了。我安裝了一個新的虛擬機,並發現這個全新的安裝也做了ntdll!DbgBreakPoint + 0x1 :,如果程序本身正在捕獲問題並調用ntdll.dll。謝謝。 – user1183185 2012-02-01 18:45:32

回答

2

這不是基於行斷點,但看起來像一個手動調用DebugBreak()像下面的程序:

#include "stdafx.h" 
#include "windows.h"  
int _tmain() 
{ 
    DebugBreak(); 
    return 0; 
} 

內部,方法會拋出異常。要控制WinDbg是否因異常而停止,請使用sxe bpe停止,並使用sxi bpe忽略該異常。

要試試這個,編譯上面的應用和WinDbg中(按Ctrl +Ë)下運行它。在inital斷點,接管控制:

(1c2c.6a8): Break instruction exception - code 80000003 (first chance) 
eax=00000000 ebx=00000000 ecx=779d0000 edx=0020e218 esi=fffffffe edi=00000000 
eip=773e12fb esp=0038f9e8 ebp=0038fa14 iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000246 
ntdll!LdrpDoDebuggerBreak+0x2c: 
773e12fb cc    int  3 

0:000> sxe bpe; g 
(1c2c.6a8): Break instruction exception - code 80000003 (first chance) 
*** WARNING: Unable to verify checksum for DebugBreak.exe 
eax=cccccccc ebx=7efde000 ecx=00000000 edx=00000001 esi=0038fd44 edi=0038fe10 
eip=74d5322c esp=0038fd40 ebp=0038fe10 iopl=0   nv up ei pl nz na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000206 
KERNELBASE!DebugBreak+0x2: 
74d5322c cc    int  3 

0:000> g 
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=77442100 edi=774420c0 
eip=7735fd02 esp=0038fd78 ebp=0038fd94 iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000246 
ntdll!ZwTerminateProcess+0x12: 
7735fd02 83c404   add  esp,4 

這個實驗中,鍵入.restart後。然後用sxi bpe重複實驗:

(109c.1c1c): Break instruction exception - code 80000003 (first chance) 
eax=00000000 ebx=00000000 ecx=be9e0000 edx=0009e028 esi=fffffffe edi=00000000 
eip=773e12fb esp=002ff890 ebp=002ff8bc iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000246 
ntdll!LdrpDoDebuggerBreak+0x2c: 
773e12fb cc    int  3 

0:000> sxi bpe; g 
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=77442100 edi=774420c0 
eip=7735fd02 esp=002ffc20 ebp=002ffc3c iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000246 
ntdll!ZwTerminateProcess+0x12: 
7735fd02 83c404   add  esp,4 

正如你所看到的,WinDbg中並沒有在KERNELBASE!DebugBreak+0x2停止由於異常了。