Jakie narzędzia do debugowania są dostępne dla filtrów DirectShow? Obecnie mam projekt, który kompiluje i rejestruje filtr źródła wideo, a następnie ustawiam wykres w GraphEdit. Używam C++ w visual studio 2008. Czy jest możliwe, aby debugger dołączony do filtra w jakikolwiek sposób, gdzie można ustawić punkty przerwania, sprawdzić zmienne, itp? Czy istnieje możliwość zapisania informacji diagnostycznych w miejscu, które mogę wyświetlać w czasie rzeczywistym?Jak debugować filtr DirectShow w C++
Odpowiedz
Nie powinno być problemu z dołączeniem debuggera. Ustaw graphedt.exe jako cel debugowania w projekcie Visual Studio filtru, a powinieneś mieć możliwość ustawiania punktów przerwań w kodzie. Jeśli masz z tym problemy, może to być spowodowane logiką anty-debugowania w niektórych dekoderach - musisz ich unikać.
Możesz również uzyskać przydatne informacje na temat debugowania, rejestrując dostawy oraz ich sygnatury czasowe i opóźnienia. Najlepszym sposobem na znalezienie tego jest użycie filtra tranzytowego. Istnieje przykładowy filtr monitorowy, taki jak ten, dostępny w postaci źródłowej i binarnej ze strony www.gdcl.co.uk/mobile (win32 i wygraj w wersji mobilnej).
G
Najlepszym sposobem debugowania aplikacji czasu rzeczywistego jest generowanie plików dziennika. Aby wyświetlać informacje dziennika w czasie rzeczywistym, wystarczy utworzyć rejestrowanie oparte na gniazdach klienta. Na przykład Twoja aplikacja może zacząć słuchać portu. Zewnętrzna aplikacja przeglądarki (klient) może połączyć się z tym portem i zacznie otrzymywać informacje dziennika w czasie rzeczywistym.
W kompilacji debugowania, gdy DirectShow klasy bazowe zawierają już elastyczny mechanizm logowania kontrolowanej przez klucze rejestru. Klasy bazowe same używają tego mechanizmu do rejestrowania własnej operacji. W razie potrzeby powinna istnieć możliwość modyfikacji klas bazowych, aby rejestrowanie było dostępne w kompilacji wydania diagnostycznego.
Prosty przykład:
DbgLog((LOG_TIMING, 1, TEXT(__FUNCTION__ " : Frame:%d, Stream Time:%dms, Sample Time:%dms"),
(int)currentFrame, (int)currentTime, (int)sampleTime));
To daje wyjście dziennika poprzedzony nazwą funkcji wywołującej jeśli poziom rejestrowania dla kategorii „TIMING” jest ustawiony na> = 1. Poziomy rejestrowania dla każdej kategorii są konfigurowane w rejestrze pod kluczem poniżej. Istnieje podklucz "GLOBALNY" dla minimalnego poziomu rejestrowania dla wszystkich filtrów i podkluczy dla dodatkowego rejestrowania według nazwy pliku filtra.
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DirectShow \ Debug HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ \ Debug DirectShow (kod 32bit na x64 Windows).
Edytuj klucz "LogToFile" dla każdego filtra, aby określić miejsce docelowe rejestrowania. Domyślnie jest to "Debugowanie" (dane wyjściowe debuggera), ale może to być również "Konsola" do logowania do okna konsoli lub nazwa pliku do zalogowania. Można również dodać inne rodzaje rejestrowania.
Opcja konsoli jest szczególnie przydatna do monitorowania na żywo bez debuggera. W moim systemie klasy bazowe nie otwierają okna konsoli, jeśli jeszcze nie są otwarte, więc dodałem następującą modyfikację wxdebug.cpp, aby bezwarunkowo otworzyć konsolę, jeśli żądanie konsoli jest wymagane.
if (!lstrcmpi(szFile, TEXT("Console"))) {
AllocConsole(); // modification - always allocate console if using Console output
Aby uzyskać więcej informacji, patrz DirectShow Debug Output Functions.
Niektóre narzędzia do analizy przepływu danych pomiędzy filtrami: edytor wykres
Open source GraphStudioNext filtr analizator (i analizator plik pisarz) pokaże wizualny dziennik aktywności po włożeniu pomiędzy dwoma filtrami zainteresowania.Musisz zbudować go samodzielnie, aby uzyskać tę funkcję na teraz.
Geraint Davie's monitor filter napisze plik dziennika aktywności na dysk.
- 1. C++ Nieobsługiwany wyjątek - jak debugować
- 2. Jak debugować ten błąd C#?
- 3. DirectShow - Pobieranie klatek wideo
- 4. filtr tablicą w języku C#
- 5. "Fałszywe" urządzenie przechwytujące wideo DirectShow
- 6. Jak mogę debugować błędy St9bad_alloc w gdb w C?
- 7. Jak debugować szablon Jinja2?
- 8. Jak debugować makro preprocesora
- 9. pasmowego realizacja Filtr Butterwortha w C++
- 10. Jak debugować tunel ssh
- 11. Jak debugować kod Erlang?
- 12. Jak debugować LESS w Chrome?
- 13. Jak debugować maszynopis w Ionic2
- 14. Jak debugować w Operze Mini?
- 15. Jak debugować VCL w lakierze?
- 16. Jak debugować Angular2 w Chrome
- 17. Jak debugować Dojo w przeglądarce?
- 18. Pobieranie próbek DirectShow na Windows 8
- 19. Jak skutecznie debugować makra w VS?
- 20. Jak debugować plik DLL w Delphi
- 21. Jak ustawić filtr w log4j.xml
- 22. C++: Jak debugować aplikację C++ skompilowaną przy użyciu narzędzia "Microsoft Visual C++" toolchain w środowisku Eclipse?
- 23. Jak debugować projekt Vsix
- 24. Jak debugować wywołanie Rscript
- 25. Jak debugować gulpfile.js
- 26. Jak debugować interfejs Swing?
- 27. Jak debugować kod AutoMapper?
- 28. Jak mogę debugować AppleScript?
- 29. Jak mogę debugować makra?
- 30. Jak debugować kod asynchroniczny?
Omigod. Nie miałem pojęcia, że możesz tak podłączyć debuggera. To jest spektakularne. –