LogDispatch - 调试模块






4.50/5 (3投票s)
2004年5月17日
4分钟阅读

35687

870
为您项目准备的另一个调试模块(调试/发布版本)。
引言
您能想象在没有运行时调试程序代码的可能性下进行编程吗?显而易见,这样的编程确实存在,但当我们处理大型复杂项目时,没有调试功能的编程会变得非常困难。除了标准的调试程序代码的方法,例如 Visual Studio IDE 中的输出窗口或 assert 宏,我还提出一种不算新的调试代码的方法:将您的调试数据输出到一个与 Visual Studio IDE 和您当前正在处理的项目分离的应用程序中。
特点
它有什么好处,我应该使用它吗?
- 它是一个独立模块,允许您跟踪和调试您项目的发布版本。
- 它是一个完全可控的模块,提供一套命令集,让您可以控制调试过程:关闭跟踪窗口(也称为跟踪通道),将跟踪窗口的条目保存到文件,等等。完整的命令集将在下方描述。
- 此模块支持多种(跟踪通道数量无限)跟踪通道策略。详细的跟踪通道描述将在下方给出。
- 您可以轻松修改此模块以满足您的需求。
行为
在使用此模块之前,请启动跟踪消息捕获器应用程序(之后称为“跟踪捕获器”)。发送到跟踪捕获器应用程序的跟踪数据,如果捕获器应用程序在跟踪操作期间不活动或已终止,将会被保存。所有在上述关键情况下保存的数据,当跟踪捕获器应用程序再次启动时,都会被保留并弹出到跟踪捕获器应用程序中。可以随着跟踪模块的创建而启动跟踪捕获器应用程序,并在跟踪模块被销毁时终止它。
如我所提到的,此跟踪模块允许您将跟踪数据放入跟踪捕获器应用程序中的多个输出窗口(之后称为“跟踪通道”)。跟踪通道是一个简单的窗口,有助于跟踪捕获器应用程序可视化您的跟踪数据。为了将您的跟踪数据添加到特定的跟踪通道,您必须按如下方式描述它:
_Log.setSectionName( "channel_#1" ); _Log.dump( "%s", "My trace data" );
或
_Log.dumpToSection( "channel_#1", "%s", "My trace data" );
如果您将跟踪数据发送到一个在跟踪捕获器应用程序中尚未创建的新跟踪通道,新跟踪通道将自动创建。
除了发送跟踪数据到捕获器之外,还可以通过帮助命令来操作跟踪捕获器应用程序。命令分为两部分:全局命令,以及依赖于跟踪通道的命令。
影响整个跟踪捕获器应用程序的全局命令
closeRoot
– 关闭跟踪捕获器应用程序;onTop.ON
– 启用捕获器应用程序的“总在最前”状态;onTop.OFF
– 禁用捕获器应用程序的“总在最前”状态。
示例
_Log.sendCmd( "closeRoot" ); _Log.sendCmd( "onTop.ON");
影响特定跟踪通道的命令
clear
- 删除给定跟踪通道的条目;close
- 关闭给定跟踪通道;save
<输出流路径> - 将给定跟踪通道的条目保存到您描述的输出流。
示例
_Log.sendCmd( "Channel_1", "clear" ); _Log.sendCmd( "Channel_2", "save c:\\channel2.log" ); _Log.sendCmd( "close" ); /** close the current output window (section) */
如何使用
为了充分利用此跟踪模块,您只需要执行两个步骤
- 第一步:您必须将解压后的源代码文件(LogDispatch_src.zip)中的 [LogDispatch.dir] 目录复制到您的项目目录中。
- 第二步:您必须在想要使用它的项目中包含此模块的头文件。
示例
#include "path_by_you\LogDispathc.dir\LogDispath.h"</pre>
<ClogDispatch> 方法
要调用下面描述的所有这些消息,您必须使用以下变量名:[_Log]。跟踪对象在项目生命周期内仅创建一次(使用单例模式)。
假设,调用 dump 消息将描述为:
_Log.dump( "System time is %d %d %5.5f ", 15, 10, 08.555121 );
跟踪操作
dump
– 格式化的跟踪数据(sprintf
格式)将被发送到捕获器应用程序。跟踪数据将被放置在调用此方法之前的“setSectionName
”方法结果命名的部分,或者如果“setSectionName
”方法未被调用,跟踪数据将放置在默认命名的“output@default
”部分。dumpToSection
– 原理与 dump 消息相同。区别在于此消息会将您的数据放入您在此消息中描述的名为特定通道。setSectionName
– 设置工作(活动)通道的名称。
配置命令
getCmdPrefix
– 设置命令的前缀。setCmdPrefix
– 返回命令的前缀。sendCmd
– 将您的消息发送到接收方应用程序。setCloseOnExit
– 启用/禁用在退出时向捕获器应用程序发送消息的可能性。setCloseCMDOnExit
– 设置当跟踪模块被销毁时将发送到捕获器应用程序的命令。
模块配置的附加操作
setClassNameOfCatcher
– 设置捕获器应用程序的类名。该类名将用于搜索将发送跟踪数据的捕获器应用程序。runCatcher
– 从指定路径执行捕获器应用程序。
结论
此跟踪模块及其使用的策略非常灵活,是调试大型项目的有效跟踪工具。在我看来,此工具将是一种非常有效的策略,用于跟踪已移除所有调试数据的项目发布版本。使用起来非常简单方便 :]。