iT邦幫忙

0

[C#] 使用 Visual Studio 2017 卻無法正常 Console.WriteLine ? 或者有其他 Debug的好方法?

各位前輩們好

由於撰寫程式時,會需要印出變數值或者字串,以便查看程式是否運作正確。

在VS2010時,使用如下程式碼,是可以正常運作的。

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AllocConsole();

public Form1()
{
    InitializeComponent();
    AllocConsole();
    Console.WriteLine("11");
}

可是在VS2017,上面的程式碼則失效,Google大神後有測試一些程式碼,還是無法正常輸出資料,最後我只能改用Debug,而且是在停止偵錯後,才會在下方"輸出"視窗看得到結果。

Debug.WriteLine("Test");

請問前輩們有遇到一樣的狀況嗎? 那要怎麼解呢? 或者有其他更好的方法可以教學呢?
謝謝!

補上偵錯 → 輸出視窗的畫面
https://ithelp.ithome.com.tw/upload/images/20190412/200172940fwyWt12Z7.jpg
https://ithelp.ithome.com.tw/upload/images/20190412/20017294qjUC1qrp1v.jpg

Homura iT邦高手 2 級 ‧ 2019-04-12 09:49:41 檢舉
Debug.WriteLine是在輸出視窗看到沒錯啊...
你是要把變數輸出到哪邊??

我剛試了一下winform Console.WriteLine也是會再輸出視窗出現
你要不要貼一下你的偵錯設定 -> 輸出視窗 是不是有把什麼設成關閉
b7307024 iT邦新手 4 級 ‧ 2019-04-12 10:15:33 檢舉
Homura大,我補上偵錯設定 -> 輸出視窗的畫面囉,感謝您!
Homura iT邦高手 2 級 ‧ 2019-04-12 10:44:35 檢舉
看起來沒什麼問題@@

2 個回答

2
Homura
iT邦高手 2 級 ‧ 2019-04-12 11:05:49
最佳解答

喔我找到原因了
你專案的輸出類型要改成主控台才會有訊息
會變成下面這樣
https://ithelp.ithome.com.tw/upload/images/20190412/20109839DBD36o5mbw.png

看更多先前的回應...收起先前的回應...
b7307024 iT邦新手 4 級 ‧ 2019-04-12 11:33:03 檢舉

非常感謝Homura大的協助,這篇回覆是正解無誤。不過請問從"Windows 應用程式"改為"主控台應用程式"會有什麼差別嗎?另外,是否有更好的Debug方式呢? 還是說我這種方式也可以?

Homura iT邦高手 2 級 ‧ 2019-04-12 11:44:15 檢舉

b7307024

不過請問從"Windows 應用程式"改為"主控台應用程式"會有什麼差別嗎?

這個我就不清楚了/images/emoticon/emoticon06.gif
如果只是要Debug還是使用中斷點,程式執行到那邊區域變數可以看到目前變數狀況,或是滑鼠指到變數也能看到,即時運算視窗也行

b7307024 iT邦新手 4 級 ‧ 2019-04-12 12:18:52 檢舉

好的,我學習了,非常感謝您的協助!/images/emoticon/emoticon41.gif

小魚 iT邦高手 1 級 ‧ 2019-04-12 12:58:27 檢舉

我是用 Windows應用程式 也可以耶,
不過我是用2015的,
試看看2017...

小魚 iT邦高手 1 級 ‧ 2019-04-12 13:02:47 檢舉

2017真的不行耶,
果然不愧是軟軟啊,
總是會有各種驚喜!
永遠拖到你下班時間的驚喜!
/images/emoticon/emoticon39.gif

Homura iT邦高手 2 級 ‧ 2019-04-12 13:06:48 檢舉

小魚
微軟不知道亂改了什麼/images/emoticon/emoticon05.gif
b7307024
解決了幫我選個正解/images/emoticon/emoticon41.gif

b7307024 iT邦新手 4 級 ‧ 2019-04-12 13:22:58 檢舉

辛苦了,所以這些問題就是要靠有經驗的前輩來解決,呵呵!

0
小魚
iT邦高手 1 級 ‧ 2019-04-12 09:10:35

你那是WinForm吧,
我不知道你VS 2010也是用WinForm嗎?
通常Console.WriteLine是用在Console模式,
雖然WinForm也可以開Console視窗,
但是就會變成有一個WinForm的視窗,
加上一個Console的視窗.

看更多先前的回應...收起先前的回應...
b7307024 iT邦新手 4 級 ‧ 2019-04-12 09:23:59 檢舉

是的,我在VS 2010也是用WinForm,平時不用就會把AllocConsole();註解,要用時才會取消註解。

小魚 iT邦高手 1 級 ‧ 2019-04-12 09:31:25 檢舉

2010我不知道
2015我是這樣寫的

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AllocConsole();

[DllImport("Kernel32")]
public static extern void FreeConsole();

但是我發現把下面的FreeConsole去掉好像也是會跑出視窗,
這個就沒研究了...

小魚 iT邦高手 1 級 ‧ 2019-04-12 09:43:22 檢舉

另外你可以用

//TODO: 備註內容

加入工作清單
到時候就不會忘記改了

b7307024 iT邦新手 4 級 ‧ 2019-04-12 10:36:31 檢舉

小魚大,我測試您的程式碼,結果還是一樣,有跳出Console視窗,但卻沒有印出任何資料。

Homura iT邦高手 2 級 ‧ 2019-04-12 10:46:43 檢舉

所以是想輸出到跳出的Console視窗裡嗎?

b7307024 iT邦新手 4 級 ‧ 2019-04-12 10:48:56 檢舉

對阿,這樣我就不用等到程式執行結束,才知道結果。

Homura iT邦高手 2 級 ‧ 2019-04-12 10:56:17 檢舉

b7307024
怎麼不拉個多行TextBox 把資料塞進去就好?

小魚 iT邦高手 1 級 ‧ 2019-04-12 13:04:36 檢舉

不過Debug方式很多,
Console是一種,
中斷點是一種,
紀錄Log是一種,(上線後只能用這種)
其他的留待你自己去尋找...

我要發表回答

立即登入回答