(C++)定制一个可输出更多信息的assert
2013-01-04 14:53
274 查看
我们经常用assert来除错,它能告诉我们断言失败的代码行和表达式。但是,有时我们希望能在assert失败时得到更多信息,例如:当GetLastError() != ERROR_SUCCESS时,还希望将这个ErrorCode到底是多少也显示在assert弹出的对话框中。
废话就不多说了,直接上代码:
这里大家可以根据需要自行扩展。
下面是一个调用的例子:
其中GetErrorString是提取ErrorCode对应的描述信息的函数,定义如下:
废话就不多说了,直接上代码:
#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++中多次循环输出一个文件内的每行信息
- C++第十周【任务2】定义一个名为CPerson的类,有以下私有成员:姓名、身份证号、性别和年龄,成员函数:构造函数、析构函数、输出信息的函数。
- 提示用户输入信息,并将用户输入的写入一个文件,当用户输入的信息 是quit的时候,打印输出用户输入的总长度
- 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
- 一个简单的将GUI程序的log信息输出到关联的Console窗口中
- 提供一个Qml 真机debug信息输出组件
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- “无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性 “之解决
- 设在数组A中有10个整数 现从键盘中输入一个数 检查该数是否在数组总,若在数组中则输出该书在数组总的位置若从数组中未找到该数 则输出“NOT FOUND!”信息
- C++输入一个字符串,去掉这个字符串中出现次数最少的字符 例如: 输入:abcabbc 输出:bbb
- 在MFC程序中,加入一个cpp文件,如果想要打印输出信息的话,用这个语句最便捷
- C++作业 01_01: 读入一个整数,将各位数上的数拆下来并输出
- 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性
- C++ 用条件编译 控制开发过程中输出调试信息
- C++怎么把整型、浮点型、字符串格式化输出到一个字符串中
- 有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并 (按字母顺序排列), 输出到一个新文件C中
- C/C++:输入一个数,输出这个数的绝对值,绝对值的正弦值,绝对值的开平方值。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 将C++调试信息显示在VS输出窗口中, 像TRACE一样调用
- Powershell脚本获取列表上event receiver信息并输出到一个csv文件中