博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【MyBean调试笔记】接口的使用和清理
阅读量:6708 次
发布时间:2019-06-25

本文共 1103 字,大约阅读时间需要 3 分钟。

【DEMO信息】

   有问题的DEMO, 由芒果提交

【问题描述】

双击Tab页面关闭页面和插件的时候出现AV异常

  

 

【问题调试】

我们在调试的时候出现这个错误时断点停在这里

 

可以看到停留在这个位置@IntfClear,指针清理的位置

好我们来调试下这个过程,跟一下是什么时候出现的, 在end 处下个断点后切换到cpu页,我们看到在ret之前调用了一过程,这个地址应该是做一些清理工作后然后返回到调用者地址,

跟进去后,一会就跳到错误的界面,可以说明在清理时出现的,这个时候我们来看看这段代码

 

procedure TfrmMain.pgcMainMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var  Index: Integer;  lvPluginForm: IPluginForm;  lvTabShtEx:TTabShtEx;begin  // 左键点击并且双击  if (Button = mbLeft) and (ssDouble in Shift) then  begin    Index := pgcMain.IndexOfTabAt(X, Y);    if Index >= 0 then    begin      lvTabShtEx := TTabShtEx(pgcMain.Pages[Index]);      lvPluginForm := lvTabShtEx.PluginForm;      if Application.MessageBox('确认要关闭画面吗?', '询问', MB_OKCANCEL + MB_ICONQUESTION) = IDCANCEL then        Exit;      lvPluginForm.freeObject;      pgcMain.Pages[Index].Free;    end;  end;end;

 

这段代码中有一个lvPluginForm为接口IPluginForm变量, 过程在退出时会执行lvPluginForm := nil和其他一些资源的清理工作,清理的时候会触发对象的__release方法,但是我们看到这个对象已经释放掉了,然后在进行清理的时候出现了上面看到的访问违规的错误。

【问题解决】

找到出现问题的根本,解决起来就很快了,尽量不要等到过程清理时在去清理你的资源,特别是可能访问不存在的资源。在end;之前 加一句lvPluginForm := nil;这样就好了

转载地址:http://iwilo.baihongyu.com/

你可能感兴趣的文章
快速布署rsync
查看>>
拇指接龙游戏升级记录03(升级MainScene.cpp)
查看>>
ZeroMQ接口函数之 :zmq_inproc – ØMQ 本地进程内(线程间)传输方式
查看>>
[Silverlight探秘]利用Javascript调用silverlight的方法
查看>>
深蓝词库转换2.2发布,支持手心输入法和Win10微软拼音
查看>>
转载:uIP之ARP:地址解析协议
查看>>
Visio2010绘制上下文数据流图
查看>>
CSS3魔法堂:背景渐变(Gradient)
查看>>
七个C#编程的小技巧
查看>>
Android中的AutoCompleteTextView的使用
查看>>
Windows下编译Enigmail源代码
查看>>
《基于MFC的OpenGL编程》Part 11 Blending, Antialiasing and Fog
查看>>
classpath 和 classpath*的 区别:
查看>>
Git~GitLab当它是一个CI工具时
查看>>
RPi 2B 中文语言包
查看>>
7.6. 数值函数
查看>>
OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
查看>>
【Android错误集锦】AppBarLayout is overlapping the RecyclerView in one of my xml files.
查看>>
Mybatis入门例子
查看>>
C#进阶系列——DDD领域驱动设计初探(一):聚合
查看>>