Megosztás a következőn keresztül:


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.

Hibakeresés a DirectShowban