日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#使用线程窗口调试多线程程序

發布時間:2023/12/4 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#使用线程窗口调试多线程程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

調試多線程程序一般有以下幾種辦法

1、在日志的某個地方寫日志文件。

優點:不會干擾程序的執行,特別是對網絡的多線程通信。

缺點:每次都需要打開日志文件以查看進程運行的信息。

2、利用斷點進行調試。

優點:直觀,可以直接看到運行過程的值

缺點:在多個線程設置斷點,可能讓程序跳來跳去,還需要額外地分出一部分精力用來理清程序的邏輯

3、利用彈出窗口來查看進程調試的信息。

優點;直觀

缺點;在調試網路通信的時候,使得通信的過程產生延時,導致通信失敗。

4、利用vs自帶的線程窗口來調試

優點:直觀,可以直接從進程圖上看到哪個進程是活動進程,哪些進程處于阻塞狀態。

缺點:需要結合斷點調試,基本上就是斷點調試的加強版

前面三種都比較基礎大多數人應該已經掌握了 ,下面針對第四種再詳細說明下:

比如以下示例:開了兩個線程

Task.Run(() =>{var count = 0;while(true){Thread.Sleep(1000);Console.WriteLine($"{count}");count++;}});Task.Run(() =>{var count = 0.12345;while (true){Thread.Sleep(1000);Console.WriteLine($"{count}");count += 0.1; ;}});

我僅在第一個線程設置了斷點,只想在第一線程跟蹤變量變化,但是實際上單步調試的時候你會發現,程序會跳來跳去,一會兒再上面哪個線程,一會兒又在下面哪個線程執行,

這時候的一般的做法是:

這是我做的:

  • 設置一個條件斷點,我知道這個斷點只會出現在我正在尋找的線程上。

  • 一旦斷點命中并且你在你想要的線程中,在Visual Studio線程窗口中(在調試,調試 - > Windows - >線程時),Ctrl+?A(選擇所有線程),然后Ctrl+單擊您當前所在的線程。除了要調試的線程之外,您應該擁有所有線程。

  • 單擊鼠標右鍵,然后選擇“凍結”。

  • 但是實際上:

    凍結/解凍線程是一種不正確的方式,因為其他線程不執行任何代碼。

    最正確和最有用的方法是:

  • 在斷點窗口中按Ctrl + A(選擇所有斷點)。

  • 右鍵單擊并選擇“過濾器...”。

  • 輸入“ThreadId =(當前線程ID)”。

  • 在Visual Studio 2015及更高版本中,過程類似于:

  • 在斷點窗口中按Ctrl + A(選擇所有斷點)。

  • 右鍵單擊并選擇“設置...”。

  • 選中“條件”,然后在下拉列表中選擇“過濾器”

  • 輸入“ThreadId =(當前線程ID)”。

  • 所以所有線程都被執行,但調試器僅在當前線程上命中。

    總結

    以上是生活随笔為你收集整理的C#使用线程窗口调试多线程程序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。