崩溃问题查找思路
来源:互联网 发布:做封面的软件 编辑:程序博客网 时间:2024/05/16 07:40
问题引起,是以前接手的两个控件,最近发现,在IE单进程下运行,同时多个页面运行,会崩溃。
如以往一样,查看指针是否为空,数组越界之类的,但是并未发现这种问题。
问题描述:
单进程IE,打开多个tab页,都调用my.ocx。会崩溃。
当打开的只有一个tab页时,运行正常。
当打开第二个tab页调用my.ocx时。就会崩溃。
如果多进程,每个tab一个进程,则不会崩溃。
ocx是文档视图结构。
崩溃是在myctrl中的oncreate()里面崩溃。
下面是oncreate里面的部分函数。
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
OnActivateInPlace(TRUE, NULL);//by mjh
AfxEnableControlContainer();
pDocTemplate = new CSingleDocTemplate(
IDR_MainTools,
RUNTIME_CLASS(CKCXZTDoc),
RUNTIME_CLASS(CMyPanel), // 主 SDI 框架窗口
RUNTIME_CLASS(CKCXZTView));
CDocument *pDoc = pDocTemplate->CreateNewDocument();
m_pFrame = pDocTemplate->CreateNewFrame(pDoc,NULL);
运行到m_pFrame = pDocTemplate->CreateNewFrame(pDoc,NULL);就会崩溃。
pDoc 和pDocTemplate都不是NULL。
问题解决:
问题在于CMyPanel类的oncreate里。
新建了三个什么都没有的doc、frame、view类,替换进去,程序不崩溃。
依次替换,发现在panel类的时候崩溃。
换个想法也很容易想通,pDocTemplate->CreateNewFrame(pDoc,NULL);这句崩溃。windowsAPI几乎是不会出错,两个指针也是正常的,而这句函数的作用是新建一个frame并返回frame指针,那也就是说,可能出错的就是new CSingleDocTemplate时加进去的那个frame类了。
总结:
这次崩溃问题解决,开阔了一些思路,或者说增加了一些经验。
当追踪到崩溃产生的地方是windowsAPI这种库函数,且调用到的指针都是正常的。
看似无法再追踪下去的时候,要考虑这个函数的作用,它会做什么处理,在这个“处理”中,是否和自己编写的代码有关,从而造成的问题。
- 崩溃问题查找思路
- 通过崩溃trace来查找问题原因
- 通过崩溃trace来查找问题原因
- 通过崩溃trace来查找问题原因
- 通过崩溃trace来查找问题原因
- 通过崩溃trace来查找问题原因
- 通过崩溃trace来查找问题原因
- 通过崩溃trace来查找问题原因
- 通过崩溃trace来查找问题原因
- 通过崩溃trace来查找问题原因
- 崩溃问题查找方式-写文件
- Melis系统崩溃问题分析以及解决思路
- VC程序Release程序崩溃后问题根源查找
- 自己打包程序报错问题查找思路
- NDK 崩溃查找方法
- 查找内核崩溃断点
- linux下程序崩溃后记录调用堆栈.以便查找问题
- 通过崩溃trace来查找问题原因 Application received signal SIGSEGV(null)
- GestureDetector和SimpleOnGestureListener的使用教程
- SpringAop在项目中的一些巧妙使用(一)---方法执行时间记录
- SpringMVC 文件上传配置,多文件上传,使用的MultipartFile
- C#第四次作业
- LeetCode Palindrome Number
- 崩溃问题查找思路
- svn客户端中文乱码
- Android性能优化之Overdraw
- Esper学习之一:Esper介绍 .
- storm自带例子详解 (二)——BasicDRPCTopology
- 利用正则表达式来设置最大输入字符长度
- 《实体解析与信息质量》- 2.1.6 IQ与HPC
- Android 3.0之后开机无法接收系统广播权限原因
- [转] 命令行语法格式