directshow过滤器有哪些调试工具?目前,我有一个项目,编译和注册视频源过滤器,然后我在GraphEdit中设置图形。我在visual studio 2008中使用c ++。是否有可能以任何可以设置断点,检查变量等的方式将调试器附加到过滤器?除非有一种方法可以将诊断信息记录在我可以实时查看的地方吗?
答案 0 :(得分:12)
附加调试器应该没有问题。将graphedt.exe设置为过滤器的Visual Studio项目中的调试目标,您应该能够在代码中设置断点。如果你遇到这个困难,可能是因为某些解码器的反调试逻辑 - 你必须避免使用它们。
您还可以通过记录交付及其时间戳和延迟来获取有用的调试信息。我发现这样做的最好方法是使用传递过滤器。有一个像这样的监视器过滤器,源自www.gdcl.co.uk/mobile(win32和win mobile)的源和二进制形式。
答案 1 :(得分:6)
在调试版本中,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 \微软\ DirectShow的\调试 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
有关详细信息,请参阅DirectShow Debug Output Functions。
答案 2 :(得分:3)
用于分析过滤器之间数据流的一些工具:
开源图形编辑器GraphStudioNext分析器过滤器(和分析器文件编写器)将在两个感兴趣的过滤器之间插入活动的可视化日志。您现在需要自己构建它才能获得此功能。
Geraint Davie's monitor filter会将活动的日志文件写入磁盘。
答案 3 :(得分:0)
调试实时应用程序的最佳方法是生成日志文件。如果要实时查看日志信息,只需创建基于客户端服务器套接字的日志记录。例如,您的应用可以开始收听端口。外部查看器应用程序(客户端)可以连接到该端口并开始实时接收日志信息。