2012-08-13 73 views
8

当我运行我的程序(当然,它是建立在调试模式),我得到一个错误“外部异常80000003”。如何摆脱异常80000003?

根据Win32 Exception/Access Violation Errors这意味着0x80000003 EXCEPTION_BREAKPOINT A breakpoint was encountered.

然而,有没有在IDE中设置断点,我在IDE之外运行它。

是的,我有正确的可执行文件。我删除了所有断点,清理了我的项目并重新构建了它,但仍保留该对话框。我甚至删除了.exe,再次构建,看到它出现在预期的地方。验证.exe上的时间戳。我给FromCreate()添加了一个消息框,并且看到了这个消息,再加上“External exception 80000003”。

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


D'oh !!这是旧代码,我忘记了我实际上已经在一个错误条件asm int 3 end;中对此进行了编码,这向IDE发出了一个断点(或者如果IDE未运行,则为错误框)。为浪费时间道歉。

+1

完全可以理解。我自己也被类似的东西咬了。我已经把代码中的'raise exception.create('todo write this code')''留下了,我认为我也写完了。 – 2012-08-13 18:49:27

+0

+1谢谢,@warren。很高兴知道即使是专家也是错误的;-) – Mawg 2012-08-14 02:42:01

回答

7

断点本质上是一个机器级指令(操作码?),它会导致CPU处理暂停并产生异常类型信号。这通常由操作系统获取,然后转移到某个用户进程(如调试器或simillar)。

当我有这个时,它几乎总是当我的代码跳入一些数据空间。我几乎总是这样说,因为偶尔也会调试一些噩梦(!),所以我已经意外地将断点硬编码为代码。

编辑:@Ken怀特说,INT 3(断点中断)是我用硬编码:-)

的一个

我会做的第一件事是获得一个堆栈跟踪和backwords工作。

+0

一个很好的观点(+1),并且很有可能使用我的C代码:-)但是肯定不太可能使用Delphi?尽管如此,我仍会尝试对代码进行一点一点的注释,或者添加更多的消息框并查看出现这两个错误的哪两个,以帮助我找到它。谢谢 – Mawg 2012-08-13 04:02:30

+1

我没有使用过Deplhi,但由于它不是托管代码,我总是会假设如果我使用函数指针的等价物,我可以跳转位置。 – 2012-08-13 04:03:42

+0

德尔福基本上是帕斯卡。虽然它可以有指针,但你必须跳过箍环才能使用它们 - 而我却没有。这就是为什么我认为我的代码不可能跳到数据段(除此之外,它在该消息之后继续运行)。 – Mawg 2012-08-13 04:26:21