简易的调试框架,可以任意添加你想测试的信息。有问题发邮件binghan2836@163.com
来源:互联网 发布:淘宝运营猝死 编辑:程序博客网 时间:2024/04/27 16:23
//////////////////////////////////////////////////////////////////////////////////////////
//debug.h文件
#ifndef _DEBUG_H_
#define _DEBUG_H_
#include<stdio.h>
#include<tchar.h>
#include <time.h>
#include <sys/timeb.h>
#define DEBUG_FILE_NAME TEXT("debug.zhang")
#define DEBUG_MAX_LENGTH 512
//Debug Platform define
#ifdef _DEBUG
void debug_create_file(void);
void debug_write_file(DWORD);
void debug_create_string(LPCSTR,...);
void debug_create_time_string(void);
DWORD debug_get_string_length(void);
void debug_close_handle(void);
#endif//End debug platform define
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//debug.c
#include "debug.h"
#ifdef _DEBUG
char sz_buffer[DEBUG_MAX_LENGTH] = {0};
HANDLE h_debug_file = INVALID_HANDLE_VALUE;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void debug_create_file()
{
h_debug_file = CreateFile(DEBUG_FILE_NAME,GENERIC_WRITE|GENERIC_READ,//FILE_APPEND_DATA
FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,
OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(INVALID_HANDLE_VALUE == h_debug_file)
{
MessageBox(NULL,
TEXT("文件打开失败!"),TEXT("调试程序提示框"),
MB_OK|MB_ICONSTOP);
return;
}
setbuf(stdout,sz_buffer);//重定向stdout,这样用printf()函数的时候就写入了这个sz_buffer.
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
void debug_write_file(DWORD debug_lingth_to_write )
{
DWORD debug_written_length = 0;
BOOL debug_error_flag = FALSE;
CHAR debug_temp_buffer[64] = {0};
debug_error_flag = WriteFile( h_debug_file,
&sz_buffer[0],
debug_lingth_to_write,
&debug_written_length,
NULL);
if(0 == debug_error_flag)
{
DWORD debug_error_number = 0;
debug_error_number = GetLastError();
sprintf( debug_temp_buffer,
TEXT("错误文件位置:%s/r/n")TEXT("无法写文件!错误代码为%ld/r/n"),
__FILE__, debug_error_number);
}
if(debug_lingth_to_write != debug_written_length)
{
sprintf( debug_temp_buffer,
TEXT("错误文件位置:%s/r/n")TEXT("应该写入%ld,实际写入%ld/r/n")
TEXT("请检查调试记录!"),
__FILE__,debug_lingth_to_write,debug_written_length);
}
memset(sz_buffer,0,DEBUG_MAX_LENGTH);//清空缓冲区
return ;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
void debug_create_string(PCSTR psz_format,...)
{
va_list debug_va_list; //char*
va_start(debug_va_list,psz_format);
_vstprintf(sz_buffer,psz_format,debug_va_list);
va_end(debug_va_list);//#define va_end(ap) ( ap = (va_list)0 )
}
/////////////////////////////////////////////////////////////
void debug_create_time_string()
{
time_t debug_time = 0;
time(&debug_time);
rewind(stdout); //把stdout当成文件来处理,把文件指针重新置回文件的开头
printf(TEXT("The time is %ld"),debug_time);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
DWORD debug_get_string_length()
{
DWORD dw_length_to_write=0;
for(;dw_length_to_write<DEBUG_MAX_LENGTH;dw_length_to_write++)
{
if(0==sz_buffer[dw_length_to_write])
{
break;
}
}
if(DEBUG_MAX_LENGTH<=dw_length_to_write)
{
printf("无效的搜索/r/n");
return 12;
}
sz_buffer[dw_length_to_write]='/r';
sz_buffer[dw_length_to_write+1]='/n';
sz_buffer[dw_length_to_write+2]='/0';
return dw_length_to_write+2;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void debug_close_handle()
{
CloseHandle(h_debug_file);
}
#else
#pragma message(TEXT("调试环境下运行!"))
#endif
- 简易的调试框架,可以任意添加你想测试的信息。有问题发邮件binghan2836@163.com
- 一个发邮件的类,带验证功能,可以发html内容,可以添加附件,并解决附件乱码问题。
- 一个发邮件的类,带验证功能,可以发html内容,可以添加附件,并解决附件乱码问题。
- 一个发邮件的类,带验证功能,可以发html内容,可以添加附件,并解决附件乱码问题。
- 简易的java发邮件客户端
- 我的个人博客开通啦,欢迎来吐槽,有何问题可发邮件到1207012718@qq.com反馈,谢谢~
- ci框架的发邮件
- 解决selenium 测试结果不能重复发邮件的问题
- joomla发邮件的问题
- 添加打开gmail发邮件的链接
- MySQL发邮件的功能添加
- 使用javamail发邮件的测试
- iPhone7发布会信息大全,有你想知道的一切!
- 解决使用SQLServer2008R2的“sp_send_dbmail”发邮件,当邮件标题、内容中有中文时就会变成“?”的问题
- 关于定时发邮件的问题
- 发邮件时候遇到的一个问题
- django发中文邮件的编码问题
- Jmail组件发邮件的问题
- Eclipse中如何导入jar开发包
- ASP.NET 供求信息网(1)
- gef事件机制--拖曳类Tool(1)
- SVN Quick Reference
- 核心对象激发状态的意义
- 简易的调试框架,可以任意添加你想测试的信息。有问题发邮件binghan2836@163.com
- FSDK_FreeImage
- 随便聊聊android的源码
- JDK5.0新特性-枚举
- 如何把session中的值赋给javaScript变量
- umap项目静态代码分析
- Remoting IIS 发布
- Install sun-java5-jdk to Ubuntu 10.04
- ASP.NET2.0服务器控件之自定义状态管理