我很抱歉,如果它是重复的,我已经搜索过了,我已经看到有类似的问题,但我仍然无法调试问题。
我正在使用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
(输出打印两次)
我做错了什么?
答案 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.将调试器类型设置为本机
检查以下链接,机票已关闭,因为不可复制,但还有其他人面临类似的情况