1

調試時我想在控制檯上顯示控制檯輸出,並在文件中保存備份。 Windows沒有三通,但可以添加一個。說這個文件夾是c:\ bin \,它工作正常。我已將它添加到系統的PATH中。如何使用附加的二進制文件(如tee.exe)作爲Visual Studio的命令行參數?

問題在於設置「[] | tee [.exe] output.txt」或「| tee [.exe] output.txt」不起作用 - output.txt無處可尋。我也嘗試在調試和合並環境下的VC目錄或環境中明確添加c:\ bin \路徑爲yes。

「> output.txt」正常工作。

任何人有任何想法我可以解決這個問題?非常感謝!

+0

在Pre/Post Build設置中,你在哪裏做的?使用'OutputDebugString' ..哪裏/何時? – Ajay

+0

@ Ajay,通過調試我的意思是發佈後。當我打F5。 –

+0

是的,但是輸出了什麼?那個出現在「調試」窗口中的? – Ajay

回答

1

我假設你將| tee.exe output.txt字符串放在項目屬性「Debugging | Command Argument」中。

不幸的是,該屬性只支持重定向操作符,而不支持管道操作符。如果在preoperty中有| tee.exe output.txt字符串,並運行轉儲命令行參數的程序,則會看到該信息僅作爲參數傳遞。 「調試|命令參數」實際上並不是由完整的外殼(如cmd.exe)處理 - 它只是支持一些簡單重定向的IDE(實際上,它似乎支持比我預期的更多):

http://msdn.microsoft.com/en-us/library/kcw4dzyf.aspx

You can use the following redirection operators in this box: 

    < file 
     Reads stdin from file. 

    > file 
     Writes stdout to file. 

    >> file 
     Appends stdout to file. 

    2> file 
     Writes stderr to file. 

    2>> file 
     Appends stderr to file. 

    2> &1 
     Sends stderr (2) output to same location as stdout (1). 

    1> &2 
     Sends stdout (1) output to same location as stderr (2). 

你可以有你的程序的輸出重定向到使用>>文件,並使用tail-f命令顯示任何被添加到文件查找的內容在有限的版本。如果你這樣做,你可能想在main()中首先調用setvbuf(stdout, NULL, _IONBF, 0),以便I/O無緩衝。否則tail -f將不會看到它,直到緩衝區被刷新,我想你會看到每個輸出操作發生。

另一種方法是將控制檯窗口的「屏幕緩衝區高度」屬性設置爲很大數量 - 我在獲得新Windows機器時所做的第一件事情之一是將該值設置爲3000左右 - 然後調試正常編程並在關閉之前複製/粘貼控制檯窗口的內容。

+0

感謝您的有用信息。它有助於。總是很難說你不能做點什麼。 –

0

爲此,最好不要使用printf。相反,寫你自己的功能;採取格式化輸入,如printf - 具有可變數量的參數(...)。該函數將使用printf在控制檯上顯示,獲取寫在文件上的緩衝區,將發送到調試窗口和全部輸出。您可以根據調試/發佈構建來定製它。

它可能會像(可能有一些小錯誤):

void PrintDebuggingInfo(const char* pFormatString, ...) 
{  
    va_list arguments; 

    char OutputString[1024]; 

    va_start(pFormatString, argument);  
    vsprintf(OutputString, pFormatString, argument); // Generate string 

    // Now use `OutputString` as you wish! 
} 

您可以使用的其他vsprintf變種。事實上,所有格式化的函數只能使用這個函數!

相關問題