模拟在下将调试信息导向控制
2021-09-06 09:56 来源:莱西养生网
仍是前一篇的内容,作些补充。
前篇实现了一个stream buffer,可以以下面方式在UI程序下使用 :
console_buffer* buffer = console_buffer::instance();
buf(buffer);
cout \"hellow world\" endl;
该类主要作用我想还是在UI程序中作为调试工具用吧,可以替代TRACE宏,以在非调试状态下也能够得到trace出来的信息,然而要像TRACE一样的话,至少还有工作要做。
首先,在能够输出信息之前仍然需要调用
console_buffer* buffer = console_buffer::instance();
buf(buffer);
以初始化cout,并产生控制台窗口。
第二,在release版本下,无法自动使代码失效,要想去掉这些控制台输出,必须手工注释掉所有相关代码。
很显然,这些是作为一个TRACE模仿代码的分内之事,因此,在这里再给出解决方法。
完美的解决方法,应该是仍然保持一个源代码文件,然而不幸得很,目前还没有想出办法来。因为作为头文件,可能被包含进多个cpp文件中,而诸如console_buffer::instance();这样的动作,如果包含进多个cpp内,那编译器会毫不犹豫地执行多次。
首先是头文件的更改
#ifndef console_buffer_h
#define console_buffer_h
#ifndef _DEBUG
#define cs /##/
#else
#include streambuf
namespace std{
templateclass charT, class traits = char_traitscharT
class console_buf : public basic_streambufcharT, traits
{
...
};
templateclass charT, class traits
HANDLE console_bufcharT, traits::handle;
typedef console_bufchar console_buffer;
}
extern std::ostream out;
#define cs out
#endif
#endif
主要做了两件事,一个是前置声明了一个std::ostream 对象,以替换正规的cout, 作为标准对象,cout有其自己固有的buffer,虽然可以通过rdbuf进行替换,然而如果不在以后恢复默认缓冲,则cout很有可能不能够正确清除,自然,在UI程序debug阶段,即便出错也无所谓,然而至少不是完善的方法。
第二件事就是定义了 cs 宏,在release下,使其展开为 //, 正是标准c注释语法,如果debug下则展开为该ostream对象,如此以来
cs 123 endl;
在debug下展开为 out 123 endl;
在release下展开为 // 123 endl;
这就解决了release下的调试代码自动清除问题.
再看看新增加的cpp文件
#include \"stdafx.h\"
#ifdef _DEBUG
#include ostream
#include \"console_buffer.h\"
using namespace std;
console_buffer* buffer = console_buffer::instance();
ostream out(buffer);
台资企业在东莞成功进行了第一次创业 #endif
不干别的,就是产生一个ostream对象和一个console_buffer对象,并进行初始化。
由于头文件内有前置声明,因此不需要其他地方进行对象的声明,在工程中加入这两个文件后,只要在自己cpp包含了该头文件,就可以直接使用
cs 123 \"hellow world!\" endl;
了,这种用法我感觉比
TRACE(\"%s %d\", \"hellow world!\", 123);
更方便些。
小孩子厌食不吃饭怎么办四川成都肝病医院
广州治疗男科医院哪好
- 上一篇:模拟的自定义控件的
- 下一篇:模拟一种粗糙的网板效果物业
-
大白熊犬嘴边长了很多红包没事吧位置
大白熊犬嘴边长了一个红包包,是什么情况,求解答张牙舞爪:觉得买狗有点像皮肤病一看就知道是大白熊犬的嘴,跟我家的嘴巴很像嘴边又不能擦药,我觉得你还是去宠物医院征求下医生的意见吧如果别的地方都...
-
大白熊犬吸收不好吃的多不长个怎么回事位置
我家大白熊犬7个月大了,吸收一直不是很好, 一个月来只长了可怜的一斤肉,但是平时吃得也不少,每天2顿鱼子酱的狗粮,蛋黄,牛肉都吃的,还有发育宝钙片什么的补品,就是不吸收呀,宠物狗大便么一天次,...
-
大白熊犬吃骨头后开始干呕如何是好位置
昨晚大白熊犬吃了骨头 ,晚上躺着睡觉就开始肚子不是正常的呼吸那个样子,站起来就干呕 ,肚子一抽一抽的,是怎么回事啊丁香花:四个月的大白熊犬价格胃肠功能较弱,建议只吃狗粮。根据您的描述,有理由...
-
大白熊犬可以吃鸡蛋吗位置
导读:大白熊犬可以吃鸡蛋吗,鸡蛋富含多种氨基酸,是动物蛋白的较好的来源。大家都知道鸡蛋是营养丰富的美味食物,很多人都喜欢吃鸡蛋,我们饲养的大白熊狗狗也喜欢哦,可能有些谨慎的爱狗人士会问?鸡...
-
大白熊犬发情特征交配需要注意的事项位置
大白熊犬发情特征,当家里养的大白熊犬开始学会抱着主人的腿或者遛狗的时候发现自己狗狗会抱着别的狗狗的时候,有些饲主就误以为家里的狗狗发情了,其实并不然,这只是宣誓 的一种举动,那么大白熊犬真...
-
大白熊犬为什么会突然间浑身抽搐位置
我家养了只大白熊犬,昨天把狗窝拉塌了,我上去后,它就在地上浑身抽搐。一分钟后停了,但是起来晕忽忽的,走不成路,好象精神恍惚。几分钟就好了,没在意,今天中午又开始抽搐,大白熊犬到晚上抽搐了4...