【问题标题】:How to debug c++ DirectShow filter如何调试 C++ DirectShow 过滤器
【发布时间】:2016-09-24 03:42:00
【问题描述】:

directshow 过滤器有哪些调试工具可用?目前,我有一个项目可以编译和注册一个视频源过滤器,然后我在 GraphEdit 中设置一个图形。我在 Visual Studio 2008 中使用 C++。是否可以通过设置断点、检查变量等的任何方式将调试器附加到过滤器?除此之外,有没有办法在某个地方记录诊断信息以便我可以实时查看?

【问题讨论】:

    标签: c++ directshow


    【解决方案1】:

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

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

    G

    【讨论】:

    • 天哪。我不知道你可以像这样附加调试器。太壮观了。
    【解决方案2】:

    在调试版本中,DirectShow 基类已包含由注册表项控制的灵活日志记录机制。基类本身使用这种机制来记录它们自己的操作。如果需要,应该可以修改基类,以便在诊断版本构建中可以使用日志记录。

    一个简单的例子:

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

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

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

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

    控制台选项对于没有调试器的实时监控特别方便。在我的系统上,如果基类尚未打开,则无法打开控制台窗口,因此我在 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 会将活动日志文件写入磁盘。

      【讨论】:

        【解决方案4】:

        调试实时应用程序的最佳方法是生成日志文件。如果您想实时查看日志信息,只需创建一个基于客户端服务器套接字的日志记录。例如,您的应用可以开始侦听端口。外部查看器应用程序(客户端)可以连接到该端口并开始实时接收日志信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-29
          • 2023-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-02
          • 1970-01-01
          相关资源
          最近更新 更多