CDT*_*CDT 26 c++ visual-studio
输出到调试窗口似乎相当繁琐.cout如果我正在编写非控制台信息,我在哪里可以找到输出?
喜欢:
double i = a / b;
cout << b << endl;//I want to check out whether b is zero. It seems the output cannot be found anywhere.
Run Code Online (Sandbox Code Playgroud)
小智 89
问题很清楚.如何使用std :: cout在Visual Studio中调试非控制台应用程序.
答案很清楚:你做不到.也就是说,Visual Studio不支持std :: cout作为非控制台应用程序的调试工具.
这是Visual Studio的严重限制,甚至可能无法满足C++标准.我发现在这里试图隐藏其宝贵的Visual Studio的缺陷时,会感到非常难过.
Tre*_*key 30
对于Windows解决方案,您可以分配控制台,并将cout/cin绑定到它.例如:
AllocConsole();
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
Run Code Online (Sandbox Code Playgroud)
文档:https:
//msdn.microsoft.com/en-us/library/windows/desktop/ms681944%28v=vs.85%29.aspx
Tho*_*ews 10
要将字符串输出到调试控制台,请使用OutputDebugStringA.请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362%28v=vs.85%29.aspx
要将变量值输出到调试控制台,请使用std::ostringstream,将字符串发送到OutputDebugStringA.
过多的输出语句将导致程序严重减速.但是,它是一种很好的技术来捕获调试器有问题的东西,比如在使用基本指针时实际的子成员.
Luc*_*oom 10
SOLUTION:此答案解决了该问题,并允许您将控制台输出重定向到Visual Studio Output窗口.首先,我们需要一个覆盖默认cout字符串流的类:
class dbg_stream_for_cout
: public std::stringbuf
{
public:
~dbg_stream_for_cout() { sync(); }
int sync()
{
::OutputDebugStringA(str().c_str());
str(std::string()); // Clear the string buffer
return 0;
}
};
dbg_stream_for_cout g_DebugStreamFor_cout;
Run Code Online (Sandbox Code Playgroud)
然后,在某处您要"激活"写入VS输出窗口:
std::cout.rdbuf(&g_DebugStreamFor_cout); // Redirect std::cout to OutputDebugString!
Run Code Online (Sandbox Code Playgroud)
我想给我的 2 美分。
鉴于这可能是关于符合 C++ 标准的 VS 问题,或者我们可以使用OutputDebugStringA,如果您无法修改您的代码库,您可能会喜欢简单地将 std::cout 重定向到其他内容(例如文件)的想法。
因此,在不更改代码库的情况下,您可以执行以下建议的操作:如何将 cin 和 cout 重定向到文件?
浓缩:
#include <fstream>Run Code Online (Sandbox Code Playgroud)std::ofstream out("out.txt"); std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
std::cout.rdbuf(coutbuf); //再次重置为标准输出
希望这可以帮助某人,感谢 Nawaz 在另一个线程中提供了答案。
| 归档时间: |
|
| 查看次数: |
51319 次 |
| 最近记录: |