DirectShow-szűrők hibakeresése
[A laphoz társított funkció, DirectShowegy régi funkció. A Media Foundation -ban a MediaPlayer, a IMFMediaEngineés azhang-/videofelvétel váltotta fel. Ezek a funkciók Windows 10-hez és Windows 11-hez lettek optimalizálva. A Microsoft határozottan javasolja, hogy az új kód MediaPlayer, IMFMediaEngine és a Media Foundation részeként az Audio/Video Capture-t használja a DirectShowhelyett, ha lehetséges. A Microsoft javasolja, hogy az örökölt API-kat használó meglévő kódot át kell írni az új API-k használatára, ha lehetséges.]
A jelen témakörben ismertetett hibakeresési lehetőségek közül sok a DirectShow alaposztálytárában van implementálva. További információért lásd: DirectShow alap osztályok.
Kijelentés ellenőrzés
Használjon állításellenőrzést liberálisan. Az állítások ellenőrizhetik a kódban az előfeltételekre és a posztkondíciókra vonatkozó feltételezéseket. A DirectShow számos helyességi makrót biztosít. További információ: Helyességi és töréspont-makrók.
Objektumnevek
A hibakeresési buildekben a CBaseObject osztályból származó objektumok globális listája található. Az objektumok létrehozásakor a rendszer hozzáadja őket a listához. Ha megsemmisítik őket, a rendszer eltávolítja őket a listáról. Az objektumok listájának megjelenítéséhez hívja meg a DbgDumpObjectRegister függvényt.
A CBaseObject alaposztály konstruktormetódusa – és az abból származtatott osztályok többsége – az objektum nevének paraméterét tartalmazza. Adjon egyedi neveket az objektumoknak az azonosításukhoz. A név deklarálásakor használja a NAME makrót, hogy a név csak hibakeresési buildekben legyen lefoglalva. A kiskereskedelmi buildekben a név NULLlesz.
Hibakeresési naplózás
A DbgLog függvény hibakeresési üzeneteket jelenít meg a program végrehajtásakor. Ezzel a függvénnyel nyomon követheti az alkalmazás vagy a szűrő végrehajtását. Naplózhatja a visszatérési kódokat, a változók értékeit és minden egyéb releváns információt.
Minden hibakeresési üzenetnek van egy típusa, például LOG_TRACE vagy LOG_ERROR, valamint egy hibakeresési szint, amely az üzenet fontosságát jelzi. Az alacsonyabb hibakeresési szinttel rendelkező üzenetek fontosabbak, mint a magasabb szintűek.
Az alábbi példában egy hipotetikus szűrő elválaszt egy csapot a csapok tömbjéről. Ha a kapcsolatbontási kísérlet sikeres, a szűrő egy LOG_TRACE üzenetet jelenít meg. Ha a kísérlet meghiúsul, megjelenik egy LOG_ERROR üzenet:
hr = m_PinArray[iPin]->Disconnect();
if (FAILED(hr))
{
DbgLog((
LOG_ERROR,
1,
TEXT("Could not disconnect pin %d. HRESULT = %#x",
iPin,
hr
));
// Error handling code (not shown).
}
DbgLog((LOG_TRACE, 3, TEXT("Disconnected pin %d"), iPin));
Hibakereséskor minden egyes üzenettípushoz beállíthatja a hibakeresési szintet. Emellett minden modul (DLL vagy végrehajtható) saját hibakeresési szinteket tart fenn. Ha szűrőt tesztel, növelje a szűrőt tartalmazó DLL hibakeresési szintjét.
További információ: Kimeneti függvények hibakeresése.
Kritikus szakaszok
A holtpontok könnyebb nyomon követéséhez adjon meg olyan állításokat, amelyek meghatározzák, hogy a hívó kód rendelkezik-e egy adott kritikus szakaszsal. A CritCheckIn és CritCheckOut függvény jelzi, hogy a hívószál rendelkezik-e kritikus szakaszsal. Ezeket a függvényeket általában egy helyességi makrón belülről hívhatja meg.
A DbgLockTrace függvényt is használhatja a kritikus szakaszok tartásának vagy kiadásának nyomon követésére.
Kapcsolódó témakörök