简易的调试框架,可以任意添加你想测试的信息。有问题发邮件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