设为首页 加入收藏

TOP

__dbg.h(一)
2017-10-11 17:18:54 】 浏览:9737
Tags:__dbg.h
#ifndef __HSS_DBG_HSS__
#define __HSS_DBG_HSS__

/**************************************************************************************************\
*  2009-06-28

    调试信息输出的宏版

    (1) 一定起作用的宏
        __trace, __trace_file, __trace_fmt, __trace_end

    (2) 需要定义 __dbg__才有作用的宏
        __if, _if, __trace_dbg, __trace_file_dbg, __trace_fmt_dbg, __trace_end_dbg

        (宏名dbg在后面,是为了在搜索__trace的时候可以找到所有的宏)

    (3) 用法示例:

      __trace "a=%d b=%d\r\n", a, b); __trace_end

      __trace_file "a=%d b=%d\r\n", a, b); __trace_end

      //注意:这个宏有参数 ,并且在宏的参数括号的后面,不能有逗号
      __trace_fmt(__FILE__, __LINE__, TRUE) "a=%d b=%d", a, b); __trace_end

      其中__FILE__可以替换为其他文件名,若是全路径会只显示文件名

    (4) __if 是长格式版,显示条件的内容

    (5) _if 是短格式版,不显示条件的内容,仅显示条件的值


\**************************************************************************************************/
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define __trace_end    if (__sztrace && __sztrace[0])        \
                        OutputDebugStringA(__sztrace);    \
                    }

#define __trace    \
            {    \
                char __sztrace[260] = {0};    \
                _snprintf(__sztrace, sizeof(__sztrace), 

#define __trace_file    \
            {    \
                char __sztrace[260] = {0};    \
                int _n = _snprintf(__sztrace, sizeof(__sztrace)-1, "%08X %s/%d ", GetCurrentThreadId(), strrchr(__FILE__, '\\') + 1, __LINE__);    \
                _snprintf(__sztrace+_n, sizeof(__sztrace)-_n-1,

#define __trace_fmt(file, line, error)     \
            {                            \
                char __sztrace[260] = {0};    \
                int __n = 0;            \
                if (file && ((char*)file)[0])    \
                {                        \
                    LPCTSTR __p = strrchr(file, '\\');    \
                    if (__p == 0)        \
                        __p = file;        \
                    __n += _snprintf(__sztrace+__n, sizeof(__sztrace)-1-__n, "%s ", __p);    \
                }                        \
                if (line)                \
                {                        \
                    __n += _snprintf(__sztrace+__n, sizeof(__sztrace)-1-__n, "/%d ", line);    \
                }                        \
                if (error)                \
                {                        \
                    int se = GetLastError();    \
                    LPSTR __lpMsgbuf = 0;    \
                    if (FormatMessage(    \
                        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,    \
                        NULL,            \
                        se,            \
                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),        \
                        (LPSTR) & __lpMsgbuf,    \
                        0,                \
                        NULL)            \
                        )                \
                    {                    \
                        if (__lpMsgbuf && __lpMsgbuf[0])    \
                        {                \
                            __n += _snprintf(__sztrace+__n, sizeof(__sztrace)-1-__n, "%s (%d) ", __lpMsgbuf, se);    \
                        }                \
                        if (__lpMsgbuf)    \
                        {    \
                            LocalFree( __lpMsgbuf );    \
                        }    \
                    }                    \
                }                        \
                __n += _snprintf(__sztrace+__n, sizeof(__sztrace)-1-__n, 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//sample : __trace_bytes("profix", pData, cbData) __trace_end;
#define __trace_bytes(Profix, pData, cbData)    \
        {                                        \
            int __size = cbData * 3 + (Profix == 0 ? 0 : strlen(Profix)) + 32;    \
            char* __sztrace = (char*)alloca(__size);    \
            LPBYTE __p = (LPBYTE)pData;            \
            if (__sztrace)                        \
            {                                    \
                int __n = _snprintf(__sztrace, __size-1, "%s", Profix);    \
                for (int __l = 0 ; __l < cbData ; __l ++)    \
                {                                \
                    DWORD __d = (DWORD)__p[__l];    \
                    __n += _snprintf(__sztrace + __n, __size-1-__n, "%02X ", __d);    \
                }                                \
                __n += _snprintf(__sztrace + __n, __size-1-__n, "(%d)", cbData);    \
                __sztrace[__n] = 0;                \
                __sztrace[__size-1] = 0;        \
            }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#define __F
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【转】键盘灯亮无反映解决方法 下一篇无法安装Windows Live“OnCatalog..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目