2010-06-09 17 views
9

डायरेक्टशो फ़िल्टर के लिए कौन से डिबगिंग टूल उपलब्ध हैं? वर्तमान में, मेरे पास एक प्रोजेक्ट है जो एक वीडियो स्रोत फ़िल्टर को संकलित और पंजीकृत करता है जिसे मैंने ग्राफ़एडिट में एक ग्राफ सेट किया है। मैं विजुअल स्टूडियो 2008 में सी ++ का उपयोग कर रहा हूं। क्या फ़िल्टर से जुड़ा एक डीबगर प्राप्त करना संभव है जहां मैं ब्रेक प्वाइंट सेट कर सकता हूं, चर का निरीक्षण कर सकता हूं आदि? छोड़कर डायग्नोस्टिक जानकारी लॉग इन करने का कोई तरीका है जहां मैं वास्तविक समय में देख सकता हूं?सी ++ डायरेक्टशो फ़िल्टर को डिबग कैसे करें

उत्तर

12

डीबगर को जोड़ने में कोई समस्या नहीं होनी चाहिए। अपने फ़िल्टर के विजुअल स्टूडियो प्रोजेक्ट में डीबग लक्ष्य के रूप में graphedt.exe सेट करें और आपको अपने कोड में ब्रेकपॉइंट्स सेट करने में सक्षम होना चाहिए। यदि आपको इसके साथ समस्या हो रही है, तो हो सकता है कि यह कुछ डिकोडर्स में एंटी-डिबगिंग तर्क के कारण हो - आपको उन लोगों का उपयोग करने से बचना होगा।

आप डिलीवरी और उनके टाइमस्टैम्प और विलंबता को लॉग करके उपयोगी डीबग जानकारी भी प्राप्त कर सकते हैं। मुझे सबसे अच्छा तरीका यह है कि पास-थ्रू फ़िल्टर का उपयोग करना है। Www.gdcl.co.uk/mobile (win32 और win मोबाइल) से स्रोत और बाइनरी फॉर्म में उपलब्ध एक उदाहरण मॉनिटर फ़िल्टर है।

जी

+3

ओमिगोद। मुझे नहीं पता था कि आप इस तरह डीबगर संलग्न कर सकते हैं। यह शानदार है। –

0

वास्तविक समय ऐप्स डीबग करने का सबसे अच्छा तरीका लॉग फ़ाइलों को उत्पन्न करना है। यदि आप वास्तविक समय में लॉग जानकारी देखना चाहते हैं, तो बस क्लाइंट सर्वर सॉकेट आधारित लॉगिंग बनाएं। उदाहरण के लिए, आपका ऐप बंदरगाह को सुनना शुरू कर सकता है। एक बाहरी दर्शक ऐप (क्लाइंट) उस बंदरगाह से कनेक्ट हो सकता है और वास्तविक समय में लॉग जानकारी प्राप्त करना शुरू कर देता है।

6

एक डीबग बिल्ड में, डायरेक्टशो आधार वर्ग पहले से ही एक लचीला प्रवेश तंत्र रजिस्ट्री कुंजी द्वारा नियंत्रित किया जाता शामिल हैं। बेस क्लास स्वयं अपने तंत्र को लॉग इन करने के लिए इस तंत्र का उपयोग करते हैं। यदि आवश्यक हो तो बेस क्लास को संशोधित करना संभव होना चाहिए ताकि लॉगिंग डायग्नोस्टिक रिलीज बिल्ड में उपलब्ध हो।

एक साधारण उदाहरण:

DbgLog((LOG_TIMING, 1, TEXT(__FUNCTION__ " : Frame:%d, Stream Time:%dms, Sample Time:%dms"), 
(int)currentFrame, (int)currentTime, (int)sampleTime)); 

यह बुला समारोह का नाम दिया 'TIMING' श्रेणी के लिए प्रवेश स्तर के लिए> = 1 सेट है, तो लॉग उत्पादन पैदा करता है। प्रत्येक श्रेणी के लिए लॉगिंग स्तर नीचे दी गई कुंजी के नीचे रजिस्ट्री में कॉन्फ़िगर किए गए हैं। फिल्टर फ़ाइल नाम द्वारा अतिरिक्त लॉगिंग के लिए सभी फ़िल्टर और उप-कुंजी के लिए न्यूनतम लॉगिंग स्तर के लिए 'ग्लोबल' उप-कुंजी है।

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ डायरेक्टशो \ डीबग HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node Microsoft \ डायरेक्टशो \ डीबग (64 विंडोज पर 32 बिट कोड) \।

लॉगिंग गंतव्य निर्दिष्ट करने के लिए प्रत्येक फ़िल्टर के लिए 'लॉगटॉफ़ाइल' कुंजी संपादित करें। यह 'डीबग' (डीबगर आउटपुट) के लिए डिफ़ॉल्ट है लेकिन कंसोल विंडो पर लॉग इन करने के लिए 'कंसोल' भी हो सकता है, या लॉग इन करने के लिए फ़ाइल नाम भी हो सकता है। अन्य प्रकार के लॉगिंग भी जोड़ा जा सकता है।

कंसोल विकल्प डीबगर के बिना लाइव निगरानी के लिए विशेष रूप से सुविधाजनक है। मेरे सिस्टम पर बेस क्लास कंसोल विंडो खोलने में विफल रहता है अगर पहले से नहीं खुलता है तो मैंने कंसोल आउटपुट का अनुरोध होने पर बिना शर्त के कंसोल खोलने के लिए wxdebug.cpp में निम्न ट्वीक जोड़ा।

if (!lstrcmpi(szFile, TEXT("Console"))) { 
     AllocConsole();  // modification - always allocate console if using Console output 

DirectShow Debug Output Functions अधिक जानकारी के लिए देखें।

3

फिल्टर के बीच डाटा प्रवाह विश्लेषण करने के लिए कुछ उपकरण:

ओपन सोर्स ग्राफ संपादक GraphStudioNext विश्लेषक फिल्टर (और विश्लेषक फ़ाइल लेखक) जब ब्याज की दो फ़िल्टर के बीच डाला आप गतिविधि का एक दृश्य लॉग दिखाई देंगे।इस सुविधा को अभी प्राप्त करने के लिए आपको इसे स्वयं बनाना होगा।

Geraint Davie's monitor filter डिस्क पर गतिविधि की लॉग फ़ाइल लिखेंगे।

संबंधित मुद्दे