来自stringstream的重复输出

时间:2014-05-06 09:57:14

标签: c++ debugging stringstream

我很抱歉,如果它是重复的,我已经搜索过了,我已经看到有类似的问题,但我仍然无法调试问题。

我正在使用stringstream进行简单的调试。 我有这个宏:

#else 
#include <sstream>
extern std::wstringstream trc;
#define DEBUG_MSG(x) \
    trc.str(std::wstring());\
    trc<<x;\
    OutputDebugString(trc.str().c_str())
#endif 

当我像

一样使用它时
DEBUG_MSG("IPCFacilities: InsertCtrlMessage: write." <<" Time: "<<GetTickCount64()<<std::endl);

在DebugView中我得到:

IPCFacilities: InsertCtrlMessage: write. Time: 265793562
IPCFacilities: InsertCtrlMessage: write. Time: 265793562

(输出打印两次)

我做错了什么?

2 个答案:

答案 0 :(得分:1)

这只是一个竞争条件问题。

如果代码是这样交错的:

thread 1: trc.str(std::wstring());
thread 2: trc.str(std::wstring());
thread 1: trc<<x;
thread 1: OutputDebugString(trc.str().c_str());
thread 2: trc<<x;
thread 2: OutputDebugString(trc.str().c_str());

输出似乎打印了两次,但事实并非如此。这只是我代码中的一个错误。一如既往,宏对于这类事情都是不好的,而这次我已经吸取了教训。感谢您的参与。

答案 1 :(得分:0)

我记得我遇到过类似的问题,这是OutputDebugString的已知问题。只需将调试类型更改为本机。

对于VS2010

1.在Solution Explorer中,选择项目。

2.在“视图”菜单上,单击“属性”

3.在Property Pages对话框中,展开Configuration Properties节点,然后选择Debugging。

4.将调试器类型设置为本机

检查以下链接,机票已关闭,因为不可复制,但还有其他人面临类似的情况

http://connect.microsoft.com/VisualStudio/feedback/details/774425/outputdebugstring-prints-twice-in-the-vs-output-window-on-windows-8