chklib0.2 release notes——windows平台的c++日志系统
2012-09-23 20:17
411 查看
chklib是一个用C++编写的Windows平台的日志系统,提供给c++ developer日志调试的功能。
程序员在调试程序时,可用该库输出相关信息,辅助调试。
对于界面编程中,调试程序不可能做到频繁的下断点、弹MessageBox来打断界面运行。
在上下文切换后,有些断点是不会被命中的。难道马上就开虚拟机,remote debug?
对于有一定规模的数据处理,在一个循环中,我们不可能重复让循环中断,看内存,再运行,再中断,再看内存。一个20次的循环足够让人手抖了。
其实只要在写代码时,加入一套日志系统,将函数调用堆栈、一些关注的变量值、循环中的一些判断条件输出到一个文本文件、控制台、或者windows log中。而开销,只是在你函数体头部、循环体头部加一句不超过10个字母的代码而已。
0.2版本更新如下:
将当前执行体所在进程、线程ID输出到每一条打印的log中。多进程、多线程调试不发愁!
增加循环体监视功能。在一个大循环中,指定从第几次循环到第几次循环,每个几次循环打印一条log。log内容可以包括循环次数、循环中变量的值。调试大循环中的内存溢出不用怕!
每次启动日志系统,都会提前打印当前时间,方便与上一次调试区分!
0.1版本中的一些逻辑错误已得到修正
部分代码重构
----------------------------------------------------------------------------------------------------------------------------------
0.1版本更新如下:
1.可选择日志信息(log)的输出方式:Console控制台输出、Win Log输出, 文件输出;
2.全局参数配置:日志输出方式、输出文件位置。
3.跟踪函数调用情况,快速跟踪函数调用错误:任意函数调用时,函数调用开始输出函数进入信息,调用结束输出函数退出信息。
4.输出函数参数表。
一个简单的包含循环、多线程、有自定义函数调用的代码的调试信息输出样例(因网络排版原因,可能会略显混乱,但是在实际生成的文件中,是相当规整的):
[ProcessID:0x00000EF8 | ThreadID:0x00000984] --------------------------------------------------------------
[ProcessID:0x00000EF8 | ThreadID:0x00000984] [2012-9-23 20:08:36]
[ProcessID:0x00000EF8 | ThreadID:0x00000984] --------------------------------------------------------------
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Enter->main
[ProcessID:0x00000EF8 | ThreadID:0x00000984] use global log output
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Enter-->Function
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Function | a = 0x6, b = 0xA
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Leave-->Function
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Enter-->ThreadFunc
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=5
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=5
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=15
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=10
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=15
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=20
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=25
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=25
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=30
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=35
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=40
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=35
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=45
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=50
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=45
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=55
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=55
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=65
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=75
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=60
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=65
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=70
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=75
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=85
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=95
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Leave-->ThreadFunc
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=105
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=115
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=125
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=135
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=145
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=155
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=165
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=175
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=185
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=195
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Leave->main
对应代码如下:
chklib不只是一个日志输出系统,还是内存监控利器。
数组越界、函数调用溢出、非法内存读写,都将会被chklib发现并记录。(二期计划)
欢迎关注代码仓库:
svn://114.213.255.162/chklib , everybody read-only 权限。
如在试用中发现重大bug,请及时联系我jinyang.wong@gmail.com
程序员在调试程序时,可用该库输出相关信息,辅助调试。
对于界面编程中,调试程序不可能做到频繁的下断点、弹MessageBox来打断界面运行。
在上下文切换后,有些断点是不会被命中的。难道马上就开虚拟机,remote debug?
对于有一定规模的数据处理,在一个循环中,我们不可能重复让循环中断,看内存,再运行,再中断,再看内存。一个20次的循环足够让人手抖了。
其实只要在写代码时,加入一套日志系统,将函数调用堆栈、一些关注的变量值、循环中的一些判断条件输出到一个文本文件、控制台、或者windows log中。而开销,只是在你函数体头部、循环体头部加一句不超过10个字母的代码而已。
0.2版本更新如下:
将当前执行体所在进程、线程ID输出到每一条打印的log中。多进程、多线程调试不发愁!
增加循环体监视功能。在一个大循环中,指定从第几次循环到第几次循环,每个几次循环打印一条log。log内容可以包括循环次数、循环中变量的值。调试大循环中的内存溢出不用怕!
每次启动日志系统,都会提前打印当前时间,方便与上一次调试区分!
0.1版本中的一些逻辑错误已得到修正
部分代码重构
----------------------------------------------------------------------------------------------------------------------------------
0.1版本更新如下:
1.可选择日志信息(log)的输出方式:Console控制台输出、Win Log输出, 文件输出;
2.全局参数配置:日志输出方式、输出文件位置。
3.跟踪函数调用情况,快速跟踪函数调用错误:任意函数调用时,函数调用开始输出函数进入信息,调用结束输出函数退出信息。
4.输出函数参数表。
一个简单的包含循环、多线程、有自定义函数调用的代码的调试信息输出样例(因网络排版原因,可能会略显混乱,但是在实际生成的文件中,是相当规整的):
[ProcessID:0x00000EF8 | ThreadID:0x00000984] --------------------------------------------------------------
[ProcessID:0x00000EF8 | ThreadID:0x00000984] [2012-9-23 20:08:36]
[ProcessID:0x00000EF8 | ThreadID:0x00000984] --------------------------------------------------------------
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Enter->main
[ProcessID:0x00000EF8 | ThreadID:0x00000984] use global log output
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Enter-->Function
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Function | a = 0x6, b = 0xA
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Leave-->Function
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Enter-->ThreadFunc
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=5
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=5
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=15
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=10
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=15
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=20
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=25
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=25
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=30
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=35
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=40
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=35
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=45
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=50
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=45
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=55
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=55
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=65
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=75
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=60
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=65
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=70
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Thread Function i=75
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=85
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=95
[ProcessID:0x00000EF8 | ThreadID:0x000016D4] Leave-->ThreadFunc
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=105
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=115
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=125
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=135
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=145
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=155
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=165
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=175
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=185
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Main Function i=195
[ProcessID:0x00000EF8 | ThreadID:0x00000984] Leave->main
对应代码如下:
#include "../chklib_lib/chklib.h" #pragma comment(lib,"http://www.cnblogs.com/04.Binary/chklib_lib.lib") #include <iostream> #include <process.h> using namespace std; OLOG_SETTING(OLOG_FILE, "./log.txt"); void Function(int a,char b) { FuncTrace; OutputFuncValueTable("Function | a = 0x%X, b = 0x%X", a, b); cout<<"In Function"<<endl; //函数执行体 } void ThreadFunc(void* param) { FuncTrace; for(int i = 0;i < 100;++i) { OutputCyclVarValues(5, 80, 5, "%s i=%d", "Thread Function", i); cout<<"in thread"<<endl; //循环执行体 } } int main() { FuncTrace; OutputDbgLog("%s", "use global log output"); Function(6,10); _beginthread(ThreadFunc, 0, NULL); for(int i = 0;i < 10000;++i) { OutputCyclVarValues(5, 200, 10, "%s i=%d", "Main Function", i); cout<<"in main"<<endl; //循环执行体 } system("pause"); return 0; }
chklib不只是一个日志输出系统,还是内存监控利器。
数组越界、函数调用溢出、非法内存读写,都将会被chklib发现并记录。(二期计划)
欢迎关注代码仓库:
svn://114.213.255.162/chklib , everybody read-only 权限。
如在试用中发现重大bug,请及时联系我jinyang.wong@gmail.com
相关文章推荐
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
- windows平台下 c++获取 系统版本 网卡 内存 CPU 硬盘 显卡信息
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
- 在Windows系统下搭建ELK日志分析平台(ElasticSearch、Logstash和Kiabana)
- windows平台下,c++获取cpu型号,读取注册表获取系统软硬件信息代码
- windows平台下,c++获取cpu型号,读取注册表获取系统软硬件信息代码
- 在Windows系统下搭建ELK日志分析平台
- windows平台下,c++获取cpu型号,读取注册表获取系统软硬件信息代码
- windows平台下 c++获取 系统版本 网卡 内存 CPU 硬盘 显卡信息<转>
- 在Windows系统下搭建ELK日志分析平台
- windows平台下,c++获取cpu型号,读取注册表获取系统软硬件信息代码
- Windows系统上release版本程序bug跟踪解决方案(1)-日志记录
- 在Windows系统下搭建ELK日志分析平台(ElasticSearch、Logstash和Kiabana)
- Windows系统下用命令行编译C/C++程序过程总结
- windows 系统下C++实现的多线程
- Windows系统功能模拟 C++(EasyX插件)—— 5th 界面绘制(三)
- 掌握C/C++之后,如何在Windows系统下开发有界面的程序?
- 处理windows 2008x64平台exchange 2010 sp1打完系统补丁后,控制台无法打开