【问题标题】:How can I remove breakpoint ntdll!DbgBreakPoint+0x1 in WinDbg如何在 WinDbg 中删除断点 ntdll!DbgBreakPoint+0x1
【发布时间】:2012-02-01 16:39:15
【问题描述】:

我正在调试一个在 WinDbg 设置为我的事后调试器时崩溃的程序。我在地址 77f7f571 设置了一个断点。当它被触发时,我曾经得到以下信息:

*** 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 *

【问题讨论】:

  • 这是一个硬编码断点,而不是调试器断点。有人打电话给DebugBreak,意思是“强制中断调试器”。
  • 我是新创建的 VM 上唯一的人,所以我做了我所做的一切。我很确定我用 bp 77f7f571 添加了它,然后我导致了访问冲突,并且崩溃的程序启动了调试器。
  • 现在我明白你的意思了。我安装了一个全新的 VM,发现这个全新的安装也做了 ntdll!DbgBreakPoint+0x1:,因此程序本身正在捕获问题并调用 ntdll.dll。谢谢。

标签: windbg


【解决方案1】:

这不是基于行的断点,但看起来像手动调用DebugBreak(),如下程序所示:

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

在内部,该方法将抛出异常。控制WinDbg是否因异常停止,使用sxe bpe停止,sxi bpe忽略异常。

要试试这个,编译上面的应用程序并在 WinDbg (Ctrl+E) 下运行它。在初始断点处,接管控制:

(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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多