如何摆脱异常80000003?

Maw*_*awg 10 delphi

当我运行我的程序(诚然,它是在调试模式下构建)时,我收到错误"外部异常80000003".

根据Win32异常/访问冲突错误,它意味着0x80000003 EXCEPTION_BREAKPOINT A breakpoint was encountered.

但是,IDE中没有设置断点,我在IDE之外运行它.

是的,我有正确的可执行文件.我删除了所有断点,清理了我的项目并重新构建了它,但仍然是那个对话框.我甚至删除了.exe,再次构建,看到它出现在预期的地方.验证.exe上的时间戳.我在FromCreate()中添加了一个消息框,看到了,加上"外部异常80000003".

如何让它消失(在调试模式下构建)?


D'哦!这是旧代码,我忘了我实际上已经在一个错误条件下对此进行了编码asm int 3 end;,这标志着一个断点到IDE(或Windows,如果IDE没有运行,因此错误框).为浪费时间而道歉.

Pre*_*gha 9

断点本质上是一个机器级指令(操作码?),它导致CPU处理暂停并引发异常类型信号.这通常由操作系统选取,然后用于某些用户进程,如调试器或simillar.

当我有这个时,几乎总是我的代码跳进了一些数据空间.我几乎总是这么说,因为我偶尔也会在调试一些恶梦时将断点硬编码成代码(!).

编辑:正如@Ken White所说的int 3(断点中断)是我用来硬编码的那个:-)

我要做的第一件事是获得一个堆栈跟踪和工作后缀.

  • +1,您还可以在代码中检查`int 3`.在Delphi支持内联汇编之前,可能要做的一件事,就是在有数据断点和调试长时间运行的代码之前,可以使用`if <SomeCondition>然后asm int 3 end;`.它工作得很好(我仍然偶尔使用它,因为它实际上设置比数据BP更快),并且如果你忘记删除它并在调试器外运行会导致这个问题. (4认同)