一个异常退出的问题,请教一下陆老师,很头疼啊
陆其明吧
全部回复
仅看楼主
level 1
BinaryGhost 楼主
我的链路里使用了很多filter,程序调试时如果有异常退出,系统自带的filter都可以顺利的自己卸载,只有我写的filter经常会卡住释放不了。当然正常使用时显式Release没问题,对照资料实在不知道是哪里问题。 我的是用Dump例子修改的,filter使用了一个自己定义的接口,功能是从外部主函数取得一个链表头指针,然后在CDumpInputPin::Receive将由摄像头取数据循环写链表。
我只知道是异常退出时,有资源没有自动释放,但是没有手段定位错误。 而且加断点在析构函数里,弹出错误时根本还没有调用析构函数。断点出发直接跳到wxdebug里面选继续就会出现下面的调试信息。
线程 'Win32 线程' (0x12c0) 已退出,返回值为 0 (0x0)。
simpletestb.exe 已触发了一个断点
Dump2Buf.dll(tid 488) 77799 :
Dump2Buf.dll(tid 488) 77799 : ID Object Description
Dump2Buf.dll(tid 488) 77800 :
Dump2Buf.dll(tid 488) 77800 : 48 (0033E718) Dump2Buf Pass Through
Dump2Buf.dll(tid 488) 77801 : 44 (0033E718) Dump2Buf Pass Through
Dump2Buf.dll(tid 488) 77801 : 15 (0033E718) CDumpInputPin
Dump2Buf.dll(tid 488) 77802 : 14 (0033E718) CDumpFilter
Dump2Buf.dll(tid 488) 77802 : 13 (0033E718) CDump
Dump2Buf.dll(tid 488) 77802 : 4 (0033E718) CDumpInputPin
Dump2Buf.dll(tid 488) 77803 : 3 (0033E718) CDumpFilter
Dump2Buf.dll(tid 488) 77803 : 2 (0033E718) CDump
Dump2Buf.dll(tid 488) 77804 :
Dump2Buf.dll(tid 488) 77804 : Total object count 8
2011年09月24日 04点09分 1
level 1
BinaryGhost 楼主
又确认了一遍,根本就没有调用~CDump(),例子里有三个类CDumpInputPin,CDumpFilter,都是在CDump里初始化的,因此只有CDump有析构函数。
2011年09月24日 05点09分 2
level 1
BinaryGhost 楼主
再补充一点,MS提供的原始Dump例子也是一样,只有显式调用removefilter才去析构
2011年09月24日 07点09分 3
level 1
BinaryGhost 楼主
经过一段时间的调试(没再调这个,没这个本事了,浪费时间),发现只有Debug版本有这个问题,Release版本的DLL没有这个问题。是不是DEBUG版本里面的调试信息影响了Filter的正常使用呢? 快要成千古之谜了[生日快乐]
2011年10月04日 02点10分 4
1