崩溃问题查找思路

问题引起,是以前接手的两个控件,最近发现,在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这种库函数,且调用到的指针都是正常的。

看似无法再追踪下去的时候,要考虑这个函数的作用,它会做什么处理,在这个“处理”中,是否和自己编写的代码有关,从而造成的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值