Visual Studio - Як я магу бачыць соиЬ выхад у дадатку неконсольного?

Гэта здаецца даволі стомна для вываду на адладкавыя акно. Дзе я магу знайсці соиЬ выхад, калі я пішу інфармацыю неконсольного?

як:

double i = a/b;
cout << b << endl;//I want to check out whether b is zero. It seems the output cannot be found anywhere.
22
@BenjaminLindley Вядома, я хачу, каб убачыць вынік соиЬ. Я хачу, каб убачыць значэнне B выхад на соиЬ .
дададзена аўтар CDT, крыніца
Perhals выкарыстоўваць рамкі пратакалявання, такіх як NLog, што дазваляе накіраваць увайсці выснову/ўсіх файлаў, у кансолі, прагляду прыкладання, электронная пошта і многія іншыя?
дададзена аўтар Eric J., крыніца
Незалежна ад таго, ці з'яўляецца альтэрнатыўнае рашэнне можа быць знойдзена для гэтай канкрэтнай праблемы адладкі, я думаю, гэта цікавае пытанне, як прасілі. Я хацеў бы бачыць рэальны адказ.
дададзена аўтар Mark Ransom, крыніца
пастскрыптум Я лічу, што адказ тут: stackoverflow.com/a/428976/5987
дададзена аўтар Mark Ransom, крыніца
Вы можаце напісаць паток , які выклікае OutputDebugStringA . Гэта не перанакіроўваць COUT , але я лічу, што гэта дапаможа вам. Глядзіце мой адказ ніжэй.
дададзена аўтар Thomas Matthews, крыніца
Я збіраўся сказаць, што, але і як альтэрнатыўныя прапановы, Poco мае адзін, і я лічу, падштурхоўвання робіць таксама. Я не быў бы ў стане гаварыць з асабістага вопыту, якія лічацца лепшымі.
дададзена аўтар chris, крыніца
Якая ваша рэальная праблема? Ці з'яўляецца гэта, што вы хочаце бачыць выснову соиЬ у дадатку неконсольного? Ці гэта, як паказана ў вашым каментары, што вы хочаце ўбачыць значэнне B ?
дададзена аўтар Benjamin Lindley, крыніца
Паглядзіце на гэта stackoverflow.com/questions/6338812/…
дададзена аўтар AliBZ, крыніца

7 адказы

Пытанне вельмі ясна. Як выкарыстоўваць зЬй :: COUT для адладкі прыкладання без кансолі ў Visual Studio.

Адказ вельмі ясна: вы не можаце. Гэта значыць, Visual Studio не падтрымлівае зЬй :: COUT як адладкавыя інструмент для не-кансольных прыкладанняў.

Гэта сур'ёзнае абмежаванне Visual Studio, верагодна, няздольнасць адпавядаць стандарту C ++ нават. Я лічу, гэта вельмі сумна бачыць disinformative «адказы» тут спрабуюць схаваць гэты недахоп свайго каштоўнага Visual Studio.

77
дададзена
Хоць гэта па-ранейшаму з'яўляецца сапраўднай кропкай, для тых, хто зацікаўлены ў зручным абыходнага: зірнуць на Trevor марашек адказаць ўнізе.
дададзена аўтар Marco Kerwitz, крыніца
Калі ласка, глядзіце мой адказ. Я зрабіў гэта. На самай справе ў акне Debug Output. Няма асобнага акна кансолі.
дададзена аўтар Luc Bloom, крыніца

Для вырашэння Windows, можна вылучыць кансоль, і звязаць COUT/CIN да яго. Напрыклад:

AllocConsole();
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);  

Documentation:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681944%28v=vs.85%29.aspx

25
дададзена

To output a string to the debug console, use OutputDebugStringA. See http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362%28v=vs.85%29.aspx

Для значэнняў зменных вываду на кансоль адладкі, выкарыстоўваючы зЬй :: ostringstream , то адправіць радок OutputDebugStringA .

Празмерныя заявы вываду прывядзе да праграмы severly запавольвацца. Тым не менш, гэта добры метад, каб злавіць рэчы адладчыка мае праблемы з, напрыклад, сапраўднымі членамі дзіцяці, гуляючы з базавымі паказальнікамі.

8
дададзена
Толькі рэч пра гэта OutputDebugStringA з'яўляецца WINAPI. Што добра, калі вы ствараеце кансольнае прыкладанне для Windows, але калі вы хочаце чысты C ++ без Windows, (так, нават з дапамогай Visual Studio 2017!), Вы не можаце выкарыстоўваць гэта.
дададзена аўтар Jason Holt, крыніца

РАШЭННЕ: Адказ на гэтае пытанне вырашае пытанне і дазваляе перанакіроўваць кансольны выснова ў акно Visual Studio Output. Па-першае нам патрэбен клас, які перакрывае паток радкі соиЬ па змаўчанні:

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;

Затым, дзе вы хочаце, каб «актываваць» запісы ў акне вываду VS:

std::cout.rdbuf(&g_DebugStreamFor_cout);//Redirect std::cout to OutputDebugString!
7
дададзена

Замест таго каб выкарыстоўваць COUT, стварыць файл часопіса і ўсё, што вы хочаце ў яго пісаць.

змяніць: Выкарыстоўвайце гэты просты код для запісу ў лог-файл.

ofstream log;
log.open ("log.txt");
log << "Writing this to a file.\n";
log.close();
3
дададзена
Гэта можа здацца не быць у стане працаваць падчас выканання?
дададзена аўтар CDT, крыніца
«Дзе я магу знайсці соиЬ выхад, калі я пішу інфармацыю неконсольной?» гэта не дае адказу на пытанне.
дададзена аўтар Luchian Grigore, крыніца
@BenjaminLindley калі я пішу адзін і той жа пытанне без каментара, было б згорнуты як дублікат гэтага, і маё пытанне не быў дадзены адказ.
дададзена аўтар Luchian Grigore, крыніца
@CDT ды яна прызначана для працы падчас выканання. Адзіная праблема заключаецца ў тым, што пераменная змяняецца ад увайсці у MyFile на паўдарогі праз прыклад - ён павінен быць паслядоўным.
дададзена аўтар Mark Ransom, крыніца
@LuchianGrigore: <�я> "Я хачу, каб праверыць, ці ёсць б роўны нулю" - Гэта вырашае гэтую праблему.
дададзена аўтар Benjamin Lindley, крыніца
@LuchianGrigore: Ну, гэта пытанне відавочна мае патрэбу ў некаторай дапрацоўцы. Мэтай OP з'яўляецца не ясна, таму я папрасіў тлумачэнняў. Але, як ён стаіць, гэты адказ сапраўды звяртаецца да ўяўным праблемах ОП маюць. І я не быў бы адзін з гэтых блізкіх выбаршчыкаў.
дададзена аўтар Benjamin Lindley, крыніца

Проста выкарыстоўвайце зЬй :: cin.get() у канцы кода і г.д.:

std::cout << "print this" << std::endl;
std::cin.get();

Гэта прымушае праграму заставацца адкрытымі і чакаць ўводу карыстальніка.

Works for me anyway. Credit goes to TheChernoProject: https://www.youtube.com/channel/UCQ-W1KE9EYfdxhL6S4twUNw

2
дададзена

Я хацеў бы даць мае 2 цэнта.

Улічваючы, што, магчыма, з'яўляецца VS пытанне аб згаворлівасці з C ++ стандартнай або што мы маглі б выкарыстоўваць OutputDebugStringA , калі вы не можаце змяніць свой код базы вы можаце, як ідэя проста перанакіраваць зЬй :: COUT да нечага інакш, як файл.

So without changing your code base you can do something like suggested here:How to redirect cin and cout to files?

згушчанае:

  • add the include #include
  • at the beginning of your app, in some init, before logging you can use:
<�Папярэдне> станд :: ofstream з ( "out.txt"); станд :: streambuf * coutbuf = станд :: cout.rdbuf ();//захаваць старыя БУФЫ станд :: cout.rdbuf (out.rdbuf ());//Перанакіраванне станд :: соиЬ да out.txt!
  • у канцы вашага прыкладання/пратакалявання:
<�Р> станд :: cout.rdbuf (coutbuf);//скід на стандартны вывад зноў </р>

Спадзяюся, што гэта можа дапамагчы каму-то, Прэстыжнасць Наваз, які даў адказ у іншым струмені.

1
дададзена