捉虫记之三:1+1 ≠ 2
虫虫的世界真的很奇妙。这几天闲来无聊,就把我调试过的BUG写出来,一来和大家分享一些故事,提供一些解决思路。二来也是想总结一下虫虫的一些规律,看看能否系统地进行调试。
1+1 怎么会不等于2呢?
这次遇到的问题就是这样,我在跟踪界面上一个错误。这个错误是这样发生的,当一个子窗体关闭的时候,原先的一个Grid中的数据就报错了。很奇怪吧。
我采用了常规的调试方法,在报异常的地方设下断点,看看到底什么地方执行错了。可是已经入调试堆栈,就发现傻眼了,怎么明明是A结果的代码,变量查看器,却显示了另外一个结果。
我说,完了,编译器出问题了。于是重启IDE。还是不行,再重启电脑。也不行!
这怎么办呢?
我告诉大家一个好办法。就是找一个同事,给他讲一遍这个故事。然后你就容易有灵感了。
灵感不一定来源于你的同事,灵感往往是你已经钻进牛角尖了,出来就能看见灵感了。找你的同时,非常有助于你跳出来。
我跳出来后,得到的灵感就是:
调试器没有错,肯定是对象被释放了!不然不会有这么莫名其妙的事情发生。
方向对了,方法就简单了,只要跟踪子窗体弹出前后,对象的释放是否正确即可。也可以在怀疑对象的Destroy中设下断点,看看什么时候被释放了。
最后发现是下面这样一段代码的常用法的变种,导致了不该释放的对象被释放了。
with TSubForm.Create(nil) do
try
/// some code here
finally
Free; /// 注意这里的Free。因为是with下的,所以是针对SubForm的。
end;
但有时会一不小心,写出了下面的:
oSubForm := TSubForm.Create(nil);
try
/// some code hiere
finally
Free; /// 注意这里的Free。因为不在with下的,所以是针对方法的对象的,也就是Self(C#中是this)。
end;
好了,知道问题在哪里,解决BUG就简单多了。
捉虫记之三:1+1 ≠ 2相关推荐
- Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画
Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画 引子 这段时间一直努力在把早期版本的拇指接龙游戏(Cocos2d-x 2.2.3+CocoStud ...
- vc2010 std::tr1 bind库捉虫记
前两天发现了VC2010 tr1库中bind实现的一个bug,当时只是作了记录,没有详细分析.但作为一个QA,不找出问题所在实在不算称职,于是就有了这篇捉虫记. 闲言少叙,书归正传,tr1库就不多作介 ...
- 捉虫记---查看变量,整数转浮点
/** dot.cpp** Created on: 2014年12月31日* Author: judyge*/#include<stdio.h> #include<stdlib.h& ...
- 捉虫记 C++转java Java中equals和==的区别
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号( ...
- 捉虫记 单步跟踪 条件断点 变量查看实践
图结构 C++转java int Locate_Vex(String v) { for(int i=0;i<vexnum;i++) { if(xlist[i].data==v){return i ...
- 捉虫记 NullPointerException
C++ 十字链表存储图变为 java版 修改到没有一个语法错误 运行出现BUG 输入第二个时 NullPointerException 空指针错误 添加 public VexNode[] xlist= ...
- System.Linq捉虫记 | 论变量命名的重要性
前言 下面这段代码,你能发现什么问题吗? List<int> a = new List<int>{ 1, 2, 3, 4, 5 };var last2 = a.TakeLast ...
- Python捉虫记(持续更新)
路径问题 这是玄学,不是问题.遇到了请绝对路径改相对路径,相对路径改绝对路径,并祈祷有效. Import import pyx pyx文件的import需要Cython库的支持,因此要先装Cython ...
- 众测 Nebula Graph | 捉虫计划已开启,这项有礼
Nebulan Graph 捉虫计划 是开源的分布式图数据库 -- Nebula 发起的「找 Bug」活动,旨在发动开源社区的力量共建图数据库 Nebula. Nebula Graph:一个开源的分布 ...
最新文章
- 快速开发rails、==常用插件==
- nginx FastCGI错误Primary script unknown解决办法
- linux关闭在线登录用户
- C#类与结构体究竟谁快——各种函数调用模式速度评测
- LeetCode 234 Palindrome Linked List
- Mysql存储过程老是报错_mysql中看看这个存储过程老是报错,该如何处理
- centos6.5编译安装mysql_Centos6.5编译安装mysql 5.7.14详细教程
- messageutil.java_java socket 怎么给websocket发信息
- 基地保留节目--塔防游戏
- 北理珠大学生体质测试及健康状况的分析
- FPS游戏通用自瞄实现
- 锂电池健康状态估计(一)
- hihoder 1048
- 百度AI车牌识别测试
- win10内存占用率过高怎么办_Win10系统硬盘占用率100%各种卡死怎么办?
- 词性标注:基于MaxEnt的中文词性标注模型实现
- dreamweaver CC 快捷键
- 【计算机网络】数据链路层 : 后退 N 帧协议 GBN ( 滑动窗口 | 发送窗口长度 | “发送方“ 累计确认、超时机制 | “接收方“ 按序接收、确认帧发送机制 | 计算示例 )★
- 2021牛客多校#4 E-Tree Xor
- Pyspark Python worker exited unexpectedly (crashed) java.io.EOFException