如何调试c ++ DirectShow过滤器

Mr *_*ell 9 c++ directshow

directshow过滤器有哪些调试工具?目前,我有一个项目,编译和注册视频源过滤器,然后我在GraphEdit中设置图形.我在visual studio 2008中使用c ++.是否有可能以任何可以设置断点,检查变量等的方式将调试器附加到过滤器?除非有一种方法可以在某个地方记录诊断信息,我可以实时查看吗?

Ger*_*ies 12

附加调试器应该没有问题.将graphedt.exe设置为过滤器的Visual Studio项目中的调试目标,您应该能够在代码中设置断点.如果你遇到这个困难,可能是因为某些解码器的反调试逻辑 - 你必须避免使用它们.

您还可以通过记录交付及其时间戳和延迟来获取有用的调试信息.我发现这样做的最好方法是使用传递过滤器.有一个像这样的监视器过滤器,源自www.gdcl.co.uk/mobile(win32和win mobile)的源和二进制形式.

G

  • Omigod.我不知道你可以像这样附加调试器.这太壮观了. (3认同)

per*_*age 7

在调试版本中,DirectShow基类已包含由注册表项控制的灵活日志记录机制.基类本身使用此机制来记录自己的操作.如果需要,应该可以修改基类,以便在诊断发布版本中提供日志记录.

一个简单的例子:

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

如果"TIMING"类别的日志记录级别设置为> = 1,则会生成以调用函数名称为前缀的日志输出.在下面的密钥下的注册表中配置每个类别的日志记录级别.所有过滤器和子键的最小日志记录级别都有一个"GLOBAL"子键,用于按过滤器文件名进行额外日志记录.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\Debug HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectShow\Debug(x64 Windows上的32位代码).

编辑每个过滤器的"LogToFile"键以指定日志记录目标.这默认为"Debug"(调试器输出),但也可以是"Console"以登录到控制台窗口,或者是要登录的文件名.也可以添加其他类型的日志记录.

控制台选项对于没有调试器的实时监控特别方便.在我的系统上,如果尚未打开基类,则无法打开控制台窗口,因此我在wxdebug.cpp中添加了以下调整,以便在请求控制台输出时无条件地打开控制台.

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

有关详细信息,请参阅DirectShow调试输出函数.