У меня есть приложение Delph 6 DirectShow, которое обменивается аудио через Skype через сокеты. Я получаю прерывистое нарушение прав доступа в одном из потоков, запущенных одной из библиотек DLL, загруженных графом фильтров при запуске цепочки фильтров DirectShow. DLL не принадлежит мне, поэтому у меня нет исходного кода.
Я изучил журнал событий и вижу соответствующую выдержку при запуске графика фильтра:
Thread Start: Thread ID: $00000804. Process Test.exe ($CE4)
Module Load: QCap.dll. No Debug Info. Base Address: $757F0000. Process Test.exe ($CE4)
Thread Start: Thread ID: $00000608. Process Test.exe ($CE4)
Thread Start: Thread ID: $0000259C. Process Test.exe ($CE4)
Thread Start: Thread ID: $00002778. Process Test.exe ($CE4)
ODS: DXCHAIN, STARTING> DXCaptureFilterComponent1 succeeded Process Test.exe ($CE4)
ODS: DXCHAIN, STARTING> DXChainComp_mic2skype Process Test.exe ($CE4)
Module Load: DSOUND.dll. No Debug Info. Base Address: $73F10000. Process Test.exe ($CE4)
ODS: (TPushSourcePinBase_wavaudio.Create) Construction succeeded. Process Test.exe ($CE4)
ODS: (TPushSourcePinBase_wavaudio.Create) Construction succeeded. Process Test.exe ($CE4)
Module Load: wavdest.ax. No Debug Info. Base Address: $10000000. Process Test.exe ($CE4)
ODS: (TPushSourcePinBase_wavaudio.DecideBufferSize) Resulting buffer size for audio is: 800 Process Test.exe ($CE4)
ODS: (TPushSourcePinBase_wavaudio.DecideBufferSize) Resulting buffer size for audio is: 800 Process Test.exe ($CE4)
Thread Start: Thread ID: $000027E0. Process Test.exe ($CE4)
Thread Start: Thread ID: $00001DF0. Process Test.exe ($CE4)
Thread Start: Thread ID: $0000176C. Process Test.exe ($CE4)
Thread Start: Thread ID: $0000083C. Process Test.exe ($CE4)
Обратите внимание, строки ODS являются результатом операторов "debug print" в окне монитора отладки (OutputDebugString)
Поток, который выбросил AV в документированном выше испытании, был $ 0000176C. Поток - всегда - создан 12-й поток, а местоположение, сообщаемое отладчиком для AV, всегда * $ 77BEFOOF *. Мои вопросы:
1) Как определить, какой из динамически загружаемых библиотек DLL принадлежит неисправный поток?
2) Есть ли способ узнать начальную и конечную области памяти для каждой DLL, даже для тех, для которых у меня нет исходного кода, чтобы я мог видеть, какая DLL содержит $ 77BEF00F адрес местоположения?
3) У кого-нибудь когда-нибудь были проблемы с приложением, которое смешивало цепочки и сокеты DirectShow? Любые предостережения или советы вы можете бросить меня? Цепочки DirectShow в моем приложении смешивают аудиоданные, поступающие из сокетов, и отправляют данные в сокеты.
ОБНОВЛЕНИЕ : Используя совет Process Explorer от Roman R, я отследил местоположение ошибки AV от $ 77BEFOOF до msacm32.dll , то есть Microsoft Audio Compression Диспетчер (отображается как «Аудиофильтр Microsoft ACM» в поле Process Explorer Description .) Если у кого-либо есть опыт работы с проблемами с этой DLL, пожалуйста, поделитесь.