首页 > 代码库 > TraceTool 跟踪工具的瑞士军刀(C++版使用)

TraceTool 跟踪工具的瑞士军刀(C++版使用)

        TraceTool查看器可以显示多种类型的来源(从提供的框架、日志文件、事件日志、或者OutputDebugString方法)。一个简单而强大的客户端框架发送简单的跟踪,分组跟踪,类和对象浏览器,转储,调用堆栈。

技术分享

主页:http://www.codeproject.com/KB/trace/tracetool.aspx
下载C++ demo, library, and documentation 和TraceTool viewer and documentation

下面进行测试,Visual Studio 2008 SP1环境:
1.新建基于对话框的测试工程名称TestTrace,使用Unicode库,共享DLL方式,其余默认;
2.将"...\TraceTool 12.4\Cpp\Source"下的tracetool.h和tracetool.cpp复制到工程目录下,添加到项目工程里面;
3.因为工程是启动预编译头的,所以双击"解决方案资源管理器"的"tracetool.cpp",把下面的其中一行:

1 //#include "stdafx.h"   // remove precompiled header 

取消注释,改为:

1 #include "stdafx.h"   // remove precompiled header 

4.试着编译下工程,能编译通过;
5.下面在对话框TestTraceDlg.cpp文件,添加头文件:

1 #include "tracetool.h" 

6.添加几个测试按钮,按钮代码如下:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 /** 简单使用实例,多节点也可以使用缩进方式 */ 
void CTestTraceDlg::OnBnClickedButton1() 

    //----------------------------------单节点添加-----------------------------------     
    TTrace::Debug()->Send("你好!");                        //Debug模式 
    TTrace::Debug()->Send("这是Debug跟踪。"); 
    TTrace::Debug()->Send("你好!", "这是带有注释的"); 
 
    TTrace::Warning()->Send("This is Warning.");            //Warning模式 
 
    TTrace::Error()->Send(_T("This is Error."));            //Error模式 
    TTrace::Error()->Send("---"); 
 
    //----------------------------------多节点添加-----------------------------------   
    TraceNodeEx *nodeEx = TTrace::Debug()->CreateChildEx("多节点"); 
    nodeEx->Send(); 
    nodeEx->traceNode->Send("子节点"); 
    delete nodeEx; 
 
    //----------------------------------更改字体等-----------------------------------     
    TraceNodeEx *nodeEx2 = TTrace::Debug()->CreateChildEx("丰富节点"); 
    nodeEx2->AddFontDetail(-1,                                //列索引,-1表示所有 
                          true,                                //是否粗体 
                          false,                            //是否斜体 
                          255,                                //颜色,-1表示默认颜色 
                          12,                                //字体大小,0表示普通大小 
                          "宋体");                            //字体名称 
    nodeEx2->AddBackgroundColor(RGB(192,220,192),            //背景颜色 
                                3);                            //列索引 
    nodeEx2->Members()->Add("成员"); 
    nodeEx2->Members()->Add("成员列一", "成员列二", "成员列三") 
                        ->SetFontDetail(1,                    //列索引,-1表示所有 
                                        false,                //是否粗体 
                                        true,                //是否斜体 
                                        7071633,            //颜色,-1表示默认颜色 
                                        12,                    //字体大小,0表示普通大小 
                                        "黑体");            //字体名称 
    nodeEx2->Members()->Add("列1") 
                        ->Add("列1-1") 
                            ->Add("列1-1-1", "列1-1-2"); 
    nodeEx2->Send();                                        //发送节点到查看器,返回TraceNode *指针 
    nodeEx2->traceNode->ResendIconIndex(CST_ICO_COLLECT_ITEM);//改变此节点图标 
    delete nodeEx2; 
 
    //----------------------------------对象转储-----------------------------------     
    char buffer[100] = "1234567890qwertyuiop"; 
    TTrace::Debug()->SendDump("转储测试", NULL, "buffer变量", buffer, 15); 
 
    //----------------------------------XML字符串-----------------------------------    
    TTrace::Debug()->SendXml("XML测试", "<Data>这是XML信息</Data>"); 

/** 保存查看器内容 */ 
void CTestTraceDlg::OnBnClickedButton2() 

    //----------------------------------保存到文本,不包括右边的信息-----------------------------------     
    TTrace::WindowTrace()->SaveToTextfile("日志文件.txt");    //保存到当前目录下,亦可完整路径 
 
    //----------------------------------保存到XML,包括右边的信息-----------------------------------     
    TTrace::WindowTrace()->SaveToXml("日志文件.xml");        //保存到当前目录下,亦可完整路径 

/** 设置自动保存查看器日志文件 */ 
void CTestTraceDlg::OnBnClickedButton3() 

    //----------------------------------设置查看器日志-----------------------------------     
    TTrace::WindowTrace()->SetLogFile("C:\\查看器日志.XML",//查看器日志文件名 
                                      2,                    //0 禁用;1 启用;2 每日新文件(文件名+CCYYMMDD) 
                                      -1);                    //行数限制,以开始一个新文件,-1 不限制 

/** 不发送到查看器,可单独保存跟踪消息到XML */ 
void CTestTraceDlg::OnBnClickedButton4() 

    TTrace::Options()->sendMode = None;                        //设置不发送到TraceTool 
    TTrace::Options()->SendDate = true;                        //开启发送日期 
    TTrace::Options()->SendThreadId = false;                //关闭发送线程ID 
    TTrace::WindowTrace()->SetLogFile("本地日志.XML",        //本地日志文件名 
                                      4,                    //3 禁用;4 启用;5 每日新文件(文件名+CCYYMMDD) 
                                      3000);                //行数限制,以开始一个新文件,-1 不限制 
    TTrace::Debug()->Send("这是多字节");                    //多字节 
    TTrace::Debug()->Send(L"这是宽字节");                    //宽字节,修改了源码以显示中文 

7.在第四个按钮代码中,需要改动一些地方才能以支持中文保存XML,支持中文宽字节显示,具体修改的内容在下面给出的下载文件里;
8.运行Viewer,再编译、运行工程,结果如下图所示:
技术分享

 

下载地址:http://download.csdn.net/detail/akof1314/3912968

扩展资料:
1.TraceTool 12.4: The Swiss-Army Knife of Trace  http://www.codeproject.com/KB/trace/tracetool.aspx
2.《C++ TraceTool API documentation》 

 

http://blog.csdn.net/akof1314/article/details/7065067

TraceTool 跟踪工具的瑞士军刀(C++版使用)