调试Windows Media SDK时出现的异常中断
2007-12-17 10:50
597 查看
调试WindowsMediaSDK时出现的异常中断
Articlelastmodifiedon2002-5-20----------------------------------------------------------------
Theinformationinthisarticleappliesto:
-MicrosoftWindowsMediaFormatSDK7.0
-MicrosoftVisualC++,32-bitEditions,version6.0,SP5
----------------------------------------------------------------
TableofContents[/b]
使用过WindowsMediaSDK的兄弟们,几乎都应该遇到过这种问题。我好像没有看到微软对此有所表示,不知道有没有专门针对于此的KB文章。
现象:
当调试至下面代码的红色语句时,出现BreakPoint中断: HRESULTAddAudioStream(DWORDdwFormatTag, DWORDdwBitrate, DWORDdwSampleRate, DWORDdwChannels, DWORDdwFlags, IWMProfile*pIWMProfile, IWMProfileManager *pIWMProfileManager) { HRESULThr=S_OK; IWMStreamConfig*pIWMStreamConfig=NULL; IWMMediaProps*pIMP=NULL; IWMCodecInfo*pIWMInfo=NULL; WAVEFORMATEX*pSaveWFX=NULL; WM_MEDIA_TYPE*pType=NULL; try { do { hr= pIWMProfileManager->QueryInterface(IID_IWMCodecInfo, (void**)&pIWMInfo); if(FAILED(hr)) { returnhr; } DWORDi,j; DWORDcCodecs; hr=pIWMInfo->GetCodecInfoCount(WMMEDIATYPE_Audio, &cCodecs); 对话框内容为: [dialogMicrosoftVisualC++] UserBreakpointcalledfromcodeat0x77fa018c它的定位: DbgBreakPoint: 77FA018Cint3 VC的Output窗口打出这样的话:HEAP[elcc.exe]:InvalidAddressspecifiedtoRtlFreeHeap(2d70000,2d751f8) 当时的堆栈调用信息为: NTDLL!DbgBreakPointaddress0x77fa018c NTDLL!RtlpNtEnumerateSubKey+19613bytes NTDLL!RtlpNtEnumerateSubKey+16147bytes NTDLL!RtlDestroyHandleTable+1918bytes NTDLL!77fcba9e() MSMS001!VoodooUnQuery+28632bytes MSMS001!VoodooUnQuery+27049bytes MSMS001!VoodooUnQuery+-3737bytes VCT3216!Dcmp |
其实很久以来,在新闻组中大约有6、7个人说过这个问题,但是一直没有人回答为什么和怎么解决。 比如, Ihadquiteafewproblemsgettingthegenprofilesample[from theWindowsMediaFormatSDK]todoANYTHINGonmymachinebesides givinguserbreakswithHEAP[genprofile.exe]:InvalidAddress specifiedtoRtlFreeHeap(4d70000,4d73f30)untilIgottiredof hittingOK.Stackcrawlwassomething"helpful"like: NTDLL!77f7629c() NTDLL!77f8c4de() NTDLL!77f7e587() NTDLL!77f64f43() MSMS001!04d17b68() MSMS001!04d17539() MSMS001!04d0fcf7()VCT3216!044a4326() 比如, WheneverItryexecuting thepIWMAudioWriter->SetOutputFormat(...)linetheprogram printsthefollowingmessagethenfaults: HEAP[WMATest.exe]:InvalidAddressspecifiedto RtlFreeHeap(2460000,2d00000) I'vetrieddifferentargumentstoSetOutputFormatbutto noavail. |
原因:
看着下面的output报告,这些加载的DLL都是在执行初始化WindowsMediaFormatSDK的IWMWriter接口时加载的: LOAD_DLLbase:04600000msdmo.dll LOAD_DLLbase:53600000DEFFILE.dll LOAD_DLLbase:74F10000IMAADP32.dll LOAD_DLLbase:75CE0000MSADP32.dll LOAD_DLLbase:74EF0000MSG711.dll LOAD_DLLbase:74EC0000MSGSM32.dll LOAD_DLLbase:74EB0000TSSOFT32.dll LOAD_DLLbase:661D0000tsd32.dll LOAD_DLLbase:74F00000lhacm.dll LOAD_DLLbase:74ED0000msg723.dll LOAD_DLLbase:63F40000IAC25_32.ax LOAD_DLLbase:1C200000MSAUD32.ACM LOAD_DLLbase:04F40000sl_anet.acm LOAD_DLLbase:04F60000VCT3216.acmLOAD_DLLbase:04F80000vct3216.dll LOAD_DLLbase:057F0000MSMS001.vwpLOAD_DLLbase:05C70000mvoice.vwp OutDbStr:HEAP[CallDesigner.exe]: OutDbStr:InvalidAddressspecifiedtoRtlFreeHeap(5860000,5864228) 红色的DLL就是根源! VCT3216.acm就在你的%System32%目录下。它是一个audiocodecdriver。但是它的调试版本中由于某种原因有异常行为。 你可以删除它。但是据 也可以选择pass这个breakpoint对话框,但是你必须连续跳过这个对话框214次!J 我确实这么做过,连续按了214次F5,和214次确定,终于通过了地雷阵。J你可以看到这最后一次的output之后,是加载另一个DLL,说明异常确实发生在这几个acm和vwp中: OutDbStr:HEAP[CallDesigner.exe]: OutDbStr:InvalidAddressspecifiedtoRtlFreeHeap(5860000,6144140) LOAD_DLLbase:063F0000l3codeca.acm OutDbStr:EnterInitWriter 做VirtualDubvideo免费程序的作者,在MSMS001.vwp中也步入了同样的怪圈。MSMS001.vwp和VCT3216.acm一样,都是Voxwarefamilyofcodecs的一部分。 不过看样子,人家并不打算修正这个问题。 所以,你可以买一个自动击键器预备着。 |
Trackback:
相关文章推荐
- 调试Windows Media SDK时出现的异常中断
- 调试Windows Media SDK时出现的异常中断
- 调试Windows Media SDK时出现的异常中断
- C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib,该怎么解决
- 使用Android SDK Manager下载sdk时总是出现中断异常的解决办法。
- windows media format SDK 切割wmv/wma文件
- vs2015,vc6.0连接mysql数据库,出现运行中断异常问题
- Windows Phone 7.1 SDK为什么访问联系人出现异常
- Windows Media Player SDK 简介
- 解决在windows下VS2010编译coldet20的出现的错误:error MSB8008: 指定的平台工具集(Windows7.1SDK)未安装或无效。
- 安装github for windows出现异常
- 安装Microsoft Windows SDK 7.1时出现的错误(附解决办法)
- QT-018调试一小时后出现异常
- 调试程序时在不中断程序的情况下输出函数调用信息(Mac OS,Linux & Windows)
- 调试AutoCAD .Net程序加载时出现System.Windows.Markup.XamlParseException的解决办法
- Intel Media SDK之开发资源汇总(含Windows和Linux)
- Windows Media server SDK (3)
- windows中android SDK manager安装更新sdk很慢,或者出现Done loading packages后不动甚至没有任何可用包
- 安装Microsoft Windows SDK 7.1时出现的错误
- C# windows media encoder编程 JPG与MP3制作WMV视频-windows media encoder sdk解决方案