调试Windows Media SDK时出现的异常中断
2008-01-03 20:50
309 查看
调试Windows Media SDK时出现的异常中断
Article last modified on 2002-5-20----------------------------------------------------------------The information in this article applies to:- Microsoft Windows Media Format SDK 7.0- Microsoft Visual C++, 32-bit Editions, version 6.0, SP5----------------------------------------------------------------Table of Contents[/b]调试Windows Media SDK时出现的异常中断... 1现象:... 1原因:... 3使用过Windows Media SDK的兄弟们,几乎都应该遇到过这种问题。我好像没有看到微软对此有所表示,不知道有没有专门针对于此的KB文章。现象:
当调试至下面代码的红色语句时,出现BreakPoint中断:HRESULT AddAudioStream( DWORD dwFormatTag, DWORD dwBitrate, DWORD dwSampleRate, DWORD dwChannels, DWORD dwFlags, IWMProfile *pIWMProfile, IWMProfileManager *pIWMProfileManager ){ HRESULT hr = 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 ) ) { return hr; } DWORD i, j; DWORD cCodecs; hr = pIWMInfo->GetCodecInfoCount( WMMEDIATYPE_Audio, &cCodecs );对话框内容为:[dialog Microsoft Visual C++] User Breakpoint called from code at 0x77fa018c它的定位: DbgBreakPoint: 77FA018C int 3 VC的Output窗口打出这样的话:HEAP[elcc.exe]: Invalid Address specified to RtlFreeHeap( 2d70000, 2d751f8 ) 当时的堆栈调用信息为:NTDLL! DbgBreakPoint address 0x77fa018cNTDLL! RtlpNtEnumerateSubKey + 19613 bytesNTDLL! RtlpNtEnumerateSubKey + 16147 bytesNTDLL! RtlDestroyHandleTable + 1918 bytesNTDLL! 77fcba9e()MSMS001! VoodooUnQuery + 28632 bytesMSMS001! VoodooUnQuery + 27049 bytesMSMS001! VoodooUnQuery + -3737 bytesVCT3216! Dcmp |
其实很久以来,在新闻组中大约有6、7个人说过这个问题,但是一直没有人回答为什么和怎么解决。比如,Ed Eichman说:I had quite a few problems getting the genprofile sample [from the Windows Media Format SDK] to do ANYTHING on my machine besides giving user breaks with HEAP[genprofile.exe]: Invalid Address specified to RtlFreeHeap( 4d70000,4d73f30 ) until I got tired of hitting OK. Stack crawl was something "helpful" like: NTDLL! 77f7629c() NTDLL! 77f8c4de() NTDLL! 77f7e587() NTDLL! 77f64f43() MSMS001! 04d17b68() MSMS001! 04d17539() MSMS001! 04d0fcf7()VCT3216! 044a4326() 比如,Malcolm Nixon说:Whenever I try executing the pIWMAudioWriter->SetOutputFormat(...) line the program prints the following message then faults:HEAP[WMATest.exe]: Invalid Address specified to RtlFreeHeap( 2460000, 2d00000 )I've tried different arguments to SetOutputFormat but to no avail. |
原因:
看着下面的output报告,这些加载的DLL都是在执行初始化Windows Media Format SDK的IWMWriter接口时加载的:LOAD_DLL base:04600000 msdmo.dllLOAD_DLL base:53600000 DEFFILE.dllLOAD_DLL base:74F10000 IMAADP32.dllLOAD_DLL base:75CE0000 MSADP32.dllLOAD_DLL base:74EF0000 MSG711.dllLOAD_DLL base:74EC0000 MSGSM32.dllLOAD_DLL base:74EB0000 TSSOFT32.dllLOAD_DLL base:661D0000 tsd32.dllLOAD_DLL base:74F00000 lhacm.dllLOAD_DLL base:74ED0000 msg723.dllLOAD_DLL base:63F40000 IAC25_32.axLOAD_DLL base:1C200000 MSAUD32.ACMLOAD_DLL base:04F40000 sl_anet.acmLOAD_DLL base:04F60000 VCT3216.acmLOAD_DLL base:04F80000 vct3216.dllLOAD_DLL base:057F0000 MSMS001.vwpLOAD_DLL base:05C70000 mvoice.vwpOutDbStr: HEAP[CallDesigner.exe]: OutDbStr: Invalid Address specified to RtlFreeHeap( 5860000, 5864228 )红色的DLL就是根源!VCT3216.acm就在你的%System32%目录下。它是一个audio codec driver。但是它的调试版本中由于某种原因有异常行为。 你可以删除它。但是据Ed Eichman说并不解决问题。 也可以选择pass这个breakpoint对话框,但是你必须连续跳过这个对话框214次!J 我确实这么做过,连续按了214次F5,和214次确定,终于通过了地雷阵。J你可以看到这最后一次的output之后,是加载另一个DLL,说明异常确实发生在这几个acm和vwp中:OutDbStr: HEAP[CallDesigner.exe]: OutDbStr: Invalid Address specified to RtlFreeHeap( 5860000, 6144140 )LOAD_DLL base:063F0000 l3codeca.acmOutDbStr: Enter InitWriter 做VirtualDub video免费程序的作者,在MSMS001.vwp中也步入了同样的怪圈。MSMS001.vwp和VCT3216.acm一样,都是Voxware family of codecs的一部分。不过看样子,人家并不打算修正这个问题。所以,你可以买一个自动击键器预备着。 |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12666
相关文章推荐
- 调试Windows Media SDK时出现的异常中断
- 调试Windows Media SDK时出现的异常中断
- 调试Windows Media SDK时出现的异常中断
- C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib,该怎么解决
- 使用Android SDK Manager下载sdk时总是出现中断异常的解决办法。
- 解决在windows下VS2010编译coldet20的出现的错误:error MSB8008: 指定的平台工具集(Windows7.1SDK)未安装或无效。
- Windows Media Player SDK 简介
- 安装github for windows出现异常
- vs2015,vc6.0连接mysql数据库,出现运行中断异常问题
- windows media format SDK 切割wmv/wma文件
- Windows Phone 7.1 SDK为什么访问联系人出现异常
- QT-018调试一小时后出现异常
- 安装Microsoft Windows SDK 7.1时出现的错误(附解决办法)
- 调试程序时在不中断程序的情况下输出函数调用信息(Mac OS,Linux & Windows)
- Windows Media server SDK (3)
- windows中android SDK manager安装更新sdk很慢,或者出现Done loading packages后不动甚至没有任何可用包
- 调试AutoCAD .Net程序加载时出现System.Windows.Markup.XamlParseException的解决办法
- Intel Media SDK之开发资源汇总(含Windows和Linux)
- Windows下fabric sdk连接Linux上fabric网络的调试过程
- 安装Microsoft Windows SDK 7.1时出现的错误