综合经验:IO读写错误必然导致程序崩溃
仿佛是忽然间产生的问题,每次程序退出时候,必然崩溃,花了整整一天才找到原因,就是对数据库的IO读写错误。主要是因为析构函数调用了Disconnect函数,内容如下:
void SFTPTool::Disconnect()
{
if (!m_valided)
IsCompteValide();
if (!m_valided) {
return;
}
QString strModule = "soft";
if (!m_taskname.isEmpty()) strModule = m_taskname;
m_sftp->Disconnect();
// super exp 使用登录框时,没有初始化m_lite实例,此时插入日志,程序必然崩溃!
if (SystemGlobal::m_lite) // hang exp 这样可以解决登录框的问题,但无法解决正常退出的问题(估计是全局远程连接造成的问题)
SystemGlobal::m_lite->InsertLog("task", strModule, "disconnect", tr("disconnect by soft"));
}
崩溃的原因有两种情况:
1. 使用登录框的时候,因为System::m_lite在主界面MainWidget的构造函数中实例化,所以必然失败。这个问题通过加上if (SystemGlobal::m_lite)可以解决。
2. 软件主界面退出时,仍然出错,还是因为红色的句子。我想可能是因为有个g_sftp实例晚于主界面被析构(因为是静态实例),此时主界面都没有了,因此数据库实例也被析构了,然后在内存中把全局实例析构,就发生了错误。
综合以前的经验,教训总结:碰到IO错误,程序必然崩溃。碰到内存错误,有时候崩溃有时候不崩溃,有可能会产生误用数据而不一定崩溃。除非读写OS保护区域的内存,才会必然崩溃。使用野指针都不一定崩溃。
MainWidget::~MainWidget()
{
SystemGlobal::m_lite->InsertLog("app", "soft", "exit");
// exp 使用全局锁居然会出错 fixme 各对象的析构顺序是怎样的?
if (SystemGlobal::m_lite) {
delete SystemGlobal::m_lite; // OO 删除内存对象,不是删除日志数据库文件。这样万无一失,可随时停止日志
SystemGlobal::m_lite = NULL; // Archi 即使在主界面中析构,也仍然要把指针赋予空值,因为全局内存对象析构比主界面还晚,因此仍会出错
}
if (SystemGlobal::m_index) {
delete SystemGlobal::m_index;
SystemGlobal::m_index = NULL;
}
}
经试验,在主界面中把指针赋予空值也可解决问题。
综合经验:IO读写错误必然导致程序崩溃的更多相关文章
- WPF 线程中异常导致程序崩溃
一般我们WPF中都加全局捕获,避免出现异常导致崩溃. Application.Current.DispatcherUnhandledException += Current_DispatcherUnh ...
- 头疼3-4次的问题,数据从DB导出到EXCEL,再从EXCEL导入到DB,数据格式发生错误 ,导致 程序出错。
反思: 1 解决 问题的思路 绕远了: 在这个问题出现前,程序是运行正确 的 问题出现前,我误删了DB 的 testcase表的所有 case ,然后 再把邮件 中的excel数据导入到 DB 然后 ...
- 防止Form中嵌入WebBrowser出错导致程序崩溃
siow(1253366) 10:11:13两种方法你用的自带的webbrowser还是embeded那个毛小毛(3335076) 10:12:15或者有什么办法拦截到是webbrowser,如 ...
- 解决Qt中QTableWidget类方法setItem 时导致程序崩溃问题
在为一个音乐播放器增加功能时莫明奇妙的出现程序崩溃,定位到是由于QTableWidget 的setItem方法导致的,最终在此处找到了解决方式. 大致是说不能在setItem之前连接cellChang ...
- setSupportActionBar(toolbar)导致程序崩溃闪退
最近在做一个项目,使用了第三方的开源项目,主要是想实现android5.0之后推出的MaterialDesign的风格,但是代码已经写好了,发现一运行就闪退,所以就开始debug,发现问题出现在 To ...
- c# Linq Where 抛出异常 导致 程序崩溃
Collection was modified; enumeration operation may not execute" 这次项目中遇到一个问题, 就是C#程序随机崩溃, 抛出上面的异 ...
- Visual Studio 调试系列8 查找导致程序崩溃的 DLL(使用模块窗口)
系列目录 [已更新最新开发文章,点击查看详细] 如果应用程序在调用系统 DLL 或他人的代码时崩溃,则需要找出在崩溃发生时处于活动状态的 DLL. 如果在自己的程序之外的 DLL 中遇到崩溃, ...
- Android While 循环导致的资源占用过高进而导致程序崩溃问题
Timeline: Activity_launch_request time:6562004-14 15:31:25.347: I/dalvikvm(3483): Total arena pages ...
- 安装glibc错误链接导致系统崩溃,u盘启动紧急救援模式下修复系统。
Sln 命令 创建动态符号链接 用法 sln source dest 故障案例:一个误操作 导致了一个不小的故障,输入所有命令都无效,直接系统无法启动. 故障描述 sln /usr/lib64/l ...
随机推荐
- C#字符串拼接怎么转义背景图片
C#字符串拼接怎么转义背景图片 StringBuilder sb = new StringBuilder(); sb.Append("<div style=\"backg ...
- 【SQL】MySQL学习笔记1-----子查询
1.什么叫子查询? 通俗的讲就是查询中有查询,SQL语句中有多个select语句. 2.什么地方可以嵌入子查询? SELECT 列 (不在标准之内) FROM 表 (可以嵌入,作为表存在) WHERE ...
- 禁用浏览器缓存Ajax请求
$.ajax({ url: 'url.php', cache: false, success: function(data){ //..... } }); 仅Get有缓存, Post不会缓存
- iOS9开发之新增通知行为详解
苹果在iOS8发布时,收到短信时可以直接在通知栏输入文字并回复,非常炫酷,然而这一功能并未真正开放给开发者.iOS9新增了用户通知行为UIUserNotificationActionBehaviorT ...
- JavaScript学习笔记(6)——JavaScript语法之对象
JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 在 JavaScript 中,对象是拥有属性和方法的数据. 属性是与对象相关的值. 方法是能够在对象上执行的动作. 提示: ...
- Google 编码风格
一.Google JavaScript编码风格 简体中文版 Google JavaScript Style Guide 二.Google HTML/CSS代码风格指南 简体中文版 三.Google C ...
- [技术翻译]构建现代化的 Objective-C (上)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3561514.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- 【nodemailer】 初试
nodemailer 是什么? 简单的讲nodemailer就是用来发送邮件的.最近的一个项目需要向客户的注册邮箱发送验证连接,研究了一下. 刚开始我以为nodemailer还可以用来接收邮件,看了好 ...
- iOS数据库操作流程
SQLite最新的版本是3.0,使用之前应该先导入libsqlite3.0.dylib 1.导入流程 2.iOS中操作数据库的流程 打开数据库 准备SQL数据库 执行SQL数据库 语句完结 关闭数据库 ...
- HTML5:基本使用
单行文本输入框 type为text表示input元素为一个单行文本框,是input元素的默认表现形式.单行文本输入框支持下面的属性设置. A:设定元素大小 maxlength属性设定用户能够输入的字符 ...