簡體   English   中英

為什么在此語句后Visual Studio退出調試模式?

[英]Why does Visual Studio exit debugging mode after this statement?

我正在嘗試調試一些異步代碼,並且當我嘗試在調試器中逐步執行代碼行時,一切正常,直到到達以下代碼段中的第18行。 運行該行后,調試器將停止並且VS退出調試模式。 有沒有什么方法可以調試我所缺少的異步程序,或者代碼中是否有不正確的東西?

1. private static void ReadAsynchronously(IAsyncResult ar)
2.        {
3.            StateObject state = (StateObject)ar.AsyncState;
4.            //Data buffer for incoming data
5.            byte[] bytes = new byte[1024];
6.
7.            Socket readHandler = state.workSocket;
8.            
9.            //Flag variable for identifying the End of Character from the read message
10.            bool pFlag = false;
11.
12.            //String variable for store the reading data from the client socket 
13.            string content = string.Empty;
14.            string data = string.Empty;
15.
16.
17.            // Read data from the client socket.
18.            int read = readHandler.EndReceive(ar);
19.
20.            if (read > 0)
21.            {
                   ........

您可能在EndRead調用中缺少Exception,請嘗試使用catch塊並檢查:

int read;
try
{
    read = readHandler.EndReceive(ar);
}
catch (Exception ex)
{
    System.Diagnostics.Debug.WriteLine(ex.ToString()); //ADD BREAKPOINT HERE
}

每次您跨過一行代碼時,調試器都會讓該行代碼運行,然后使您返回中斷狀態。 在第18行中,正在發生的事情是該代碼行需要很長時間才能運行,因此似乎調試器已停止調試,但事實並非如此:調試器將在代碼行最終完成時以及何時終止。

您將需要調查為什么該操作無法完成或為什么需要這么長時間。 EndReceive方法將阻塞,直到有可用數據為止,因此最可能的原因是連接另一端的進程實際上沒有發送任何數據。

編輯:如果執行發送的代碼是您自己的,並且您正在使用StreamWriter確保在寫入后調用Flush() 或者,您可以通過AutoFlush屬性打開自動刷新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM