怎样捕捉AV(Access violation)?
AV(Access violation)内存存取错误是经常会发生的事情,通常是使用了失效的指针,或是忘了回收分配的内存空间所引起的资源泄漏造成的。在运行期间产生的AV还好捕捉,至少大体上知道AV出现在什么地方。然而在退出程序时所引起的AV则最难捕捉。如果您也遇到了这样的情况,那么恭喜您,您遇到了和我一样的令人头痛的问题。
如果是第三方控件在退出程序时引起的AV,而这种AV又不是经常会发生,只是偶尔发生,那么又该怎么办了呢?我的应用程序使用了好多第三方控件,当然如果知道是哪个控件引起了AV,我最多不使用这个控件,问题的关键是我不知道是哪个控件引起了AV,总不能把第三方控件一梆子打死,全部不使用吧?
通常在运行期产生的AV,delphi会跳出对话框,其中会有一个“View CPU”的选项,通过查看CPU窗口,大体知道AV出现在什么地方。而退出程序所引起的AV,则不会有“View CPU”的选项,通常这个对话框是操作系统产生,不是Delphi调试环境产生的,比如这个AV对话款“Exception EAcessViolation in module Project1.exe at
00027564,access violation at adress 00427564 in module 'Project1.exe' write of Adress 001470785”。
请问各位是否有调试这类AV的高招,望不啬赐教,在下不深感激。