Delphi 如何摆脱异常8000003?

Delphi 如何摆脱异常8000003?,delphi,Delphi,当我运行我的程序(无可否认,它是在调试模式下构建的)时,我得到一个错误“ExternalException 8000003” 根据它的意思是0x8000003异常\u断点遇到断点。 但是,IDE中没有设置断点,我在IDE之外运行它 是的,我有正确的可执行文件。我删除了所有断点,清理了我的项目并重新构建了它,但仍然保留了那个对话框。我甚至删除了重新构建的.exe,看到它出现在预期的地方。已验证.exe上的时间戳。我在FromCreate()中添加了一个消息框,并看到了它,以及“外部异常800000

当我运行我的程序(无可否认,它是在调试模式下构建的)时,我得到一个错误“ExternalException 8000003”

根据它的意思是
0x8000003异常\u断点遇到断点。

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

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

如何消除这种情况(在调试模式下构建)



哦!!这是旧代码,我忘记了我实际上是在一个错误条件下编写的
ASMINT3 end当然,它向IDE(如果IDE未运行,则向Windows)发出断点信号,因此出现错误框。抱歉浪费时间。

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

当我遇到这种情况时,我的代码几乎总是跳入某个数据空间。我几乎总是这样说,因为我偶尔在调试一些噩梦时也会意外地将断点硬编码到代码中(!)

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


我要做的第一件事是获取堆栈跟踪和工作背景词。

这是一个很好的观点(+1),很可能是我的C代码:-),但使用Delphi肯定不太可能?尽管如此,我还是会尝试一点一点地注释代码,或者添加更多的消息框&看看这两个错误出现在哪两个之间,以帮助我找到它。谢谢,我没有使用Deplhi,但由于它不是托管代码,我总是认为如果我使用等效的函数指针,我可以跳转位置。+1,您还可以检查代码中的
int 3
。在拥有数据断点和调试长时间运行的代码之前,有一个古老的技巧,因为Delphi支持内联汇编,所以可以这样做,那就是放置类似
if then asm int 3 end的东西。它工作得很好(我仍然偶尔使用它,因为它实际上比数据BP设置得更快),如果您忘记删除它并在调试器外部运行,就会导致此问题。
int 3
是操作码0xCC(或$CC Delphi hex样式)。肯,如果我用这个会有帮助吗?程序DebugBreak();如果FindWindow('TAppBuilder',Nil)0,则开始//IDE是否正在运行?asm int 3端;结束;完全可以理解。我自己也被类似的事情咬过。我还留下了
raiseexception.create(“todo write this code”)
,这段代码我以为我也写完了。+1谢谢,@warren。很高兴知道即使是专家也会犯错;-)