【MyBean调试笔记】接口的使用和清理

简介: 【DEMO信息】    有问题的DEMO, 由芒果提交 【问题描述】 双击Tab页面关闭页面和插件的时候出现AV异常      【问题调试】 我们在调试的时候出现这个错误时断点停在这里   可以看到停留在这个位置@IntfClear,指针清理的位置 好我们来调试下这个过...

【DEMO信息】

   有问题的DEMO, 由芒果提交

【问题描述】

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

   image

 

【问题调试】

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

image

 

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

image

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

`TDZCGURW[(RGU7B72)5CNY

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

 

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;这样就好了

目录
相关文章
|
9月前
|
设计模式 Java
java自动生成类热加载(注册和扫描)
java自动生成类热加载(注册和扫描)
java自动生成类热加载(注册和扫描)
|
9月前
|
Android开发
Bean莫名其妙的报错还可以运行。
cannot resolve 一大堆方法名。很奇怪,这其实并不会影响正常运行,值是在.get方法名的时候 get不到,看着也十分别扭。
64 0
|
11月前
|
网络安全 Windows
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
|
Java 测试技术 程序员
软件测试|解析 apk 基本信息和方法调用
软件测试|解析 apk 基本信息和方法调用
136 0
软件测试|解析 apk 基本信息和方法调用
|
JSON JavaScript 前端开发
接口测试平台代码实现46:接口调试用户异常操作处理
经过45节的学习,很多同学已经达到了一个不错的水准,可以自主找到一些问题并修复和提出改进方法,我很欣慰。 本节我们要处理的是用户异常操作引起的情况。 大部分处理我们最好都在前端上拦截,这样的好处是不通过请求 就可以瞬间提示错误,所以我们基本只打开P_apis.html就可以了。
接口测试平台代码实现46:接口调试用户异常操作处理
|
数据安全/隐私保护
Appium自动化(12) - 详解 HardwareActions 类里的方法和源码分析
Appium自动化(12) - 详解 HardwareActions 类里的方法和源码分析
104 0
Appium自动化(12) - 详解 HardwareActions 类里的方法和源码分析
|
JavaScript 前端开发
如何确保你的构造函数只能被new调用,而不能被普通调用?| 踩坑日记
如何确保你的构造函数只能被new调用,而不能被普通调用?| 踩坑日记
536 0
如何确保你的构造函数只能被new调用,而不能被普通调用?| 踩坑日记
|
监控 IDE Java
《IntelliJ IDEA 插件开发》第六节:选定对象批量织入“x.set(y.get)”代码,自动生成vo2dto
一、前言 二、需求目的 三、案例开发 1. 工程结构 2. 织入代码接口 3. 定义模板方法 4. 代码织入锚点 5. 配置菜单入口 四、测试验证 1. 复制对象 2. 生成对象 3. 最终效果 五、扩展接口 六、总结
425 0
《IntelliJ IDEA 插件开发》第六节:选定对象批量织入“x.set(y.get)”代码,自动生成vo2dto
|
监控 Java 数据处理
字节码编程,Javassist篇四《通过字节码插桩监控方法采集运行时入参出参和异常信息》
字节码编程插桩这种技术常与 Javaagent 技术结合用在系统的非入侵监控中,这样就可以替代在方法中进行硬编码操作。比如,你需要监控一个方法,包括;方法信息、执行耗时、出入参数、执行链路以及异常等。那么就非常适合使用这样的技术手段进行处理。 为了能让这部分最核心的内容体现出来,本文会只使用 Javassist 技术对一段方法字节码进行插桩操作,最终输出这段方法的执行信息,
309 0
|
XML 存储 缓存
Spring源码解析——Bean加载(doCreateBean方法补充)
本文接这上一篇:520就应该和女朋友一起学习Spring源码——Bean加载 对其进行补充~