(C++)定制一个可输出更多信息的assert
来源:互联网 发布:node.js视频教程 编辑:程序博客网 时间:2024/05/16 17:59
我们经常用assert来除错,它能告诉我们断言失败的代码行和表达式。但是,有时我们希望能在assert失败时得到更多信息,例如:当GetLastError() != ERROR_SUCCESS时,还希望将这个ErrorCode到底是多少也显示在assert弹出的对话框中。
废话就不多说了,直接上代码:
#pragma once///////////////////////////////////////////////////////////////////// XASSERT: assert with user-define message, use wide char///////////////////////////////////////////////////////////////////#include <string>#include <crtdbg.h>#ifndef _DEBUG#define XASSERT(exp_, msgw_) ((void)0)#else#define XASSERT(exp_, msgw_) _ASSERT_EXPR((exp_), (std::wstring(L#exp_)+L"\r\nMessage: "+(msgw_)).c_str())#endif
这里大家可以根据需要自行扩展。
下面是一个调用的例子:
::OpenProcess(0,0,0);XASSERT(GetLastError() == ERROR_SUCCESS, GetErrorString(GetLastError()));
其中GetErrorString是提取ErrorCode对应的描述信息的函数,定义如下:
std::wstring GetErrorString(DWORD dwErrCode) { DWORD dwRet = 0; LPWSTR szResult = NULL;std::wstring s;dwRet = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,dwErrCode, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), (LPWSTR)&szResult, 0, NULL); if (dwRet == 0){ szResult = NULL;return s;} s = szResult;LocalFree(szResult);return s; }
- (C++)定制一个可输出更多信息的assert
- 可输出文本的ASSERT
- 关于linux推广的一个想法--可定制
- 实现一个高度可定制化的Titlebar
- Windows CE是一个可定制的系统,Platform Build 4.2便是用来定制的工具
- 教你写一个C的assert宏
- 2.如何用好ASSERT宏让ASSERT更好用(定制自己的Assert)
- <C语言>如何一步一步根据简单的代码联想到更多的功能?(实现输入一个整数,输出比它小包括它本身的所有素数。)
- Myeclipse将控制台日志输出到文件中和显示更多的日志信息
- Myeclipse将控制台日志输出到文件中和显示更多的日志信息
- jboss5的完全可定制
- 可定制的Cursor--MatrixCursor
- 可定制生命周期的缓存
- 可定制的Cursor--MatrixCursor
- 无需Get更多技能,快速打造一个可持久化的任务调度
- 无需Get更多技能,快速打造一个可持久化的任务调度
- 无需Get更多技能,快速打造一个可持久化的任务调度
- 带展开更多收起更多的可扩展的ListView
- js 大写钱
- 使用 HttpLib 来访问 Web 服务
- Xcode下程序崩溃基本解决方案
- 在Windows XP系统登录Active Directory域
- 开源 免费 java CMS - FreeCMS-标签 infoAttchs
- (C++)定制一个可输出更多信息的assert
- 交换两个变量的值----两种方法(1)通过中间临时变量(2)不通过中间临时变量
- windows服务与自启动程序的区别
- Zencart系统出现”电子邮件错误: Could not execute: /usr/sbin/sendmail
- IMSI 国际移动用户识别码 IMEI 国际移动装备辨识码
- (自我总结)生成并提交APP的步骤--包括越狱版和appstore版本
- XMPP协议
- Xcode4 的错误调试定位技巧
- myeclipse中查看实现类的快捷键