[英]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.