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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

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

調(diào)試多線程程序一般有以下幾種辦法

1、在日志的某個(gè)地方寫日志文件。

優(yōu)點(diǎn):不會(huì)干擾程序的執(zhí)行,特別是對(duì)網(wǎng)絡(luò)的多線程通信。

缺點(diǎn):每次都需要打開日志文件以查看進(jìn)程運(yùn)行的信息。

2、利用斷點(diǎn)進(jìn)行調(diào)試。

優(yōu)點(diǎn):直觀,可以直接看到運(yùn)行過程的值

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

3、利用彈出窗口來查看進(jìn)程調(diào)試的信息。

優(yōu)點(diǎn);直觀

缺點(diǎn);在調(diào)試網(wǎng)路通信的時(shí)候,使得通信的過程產(chǎn)生延時(shí),導(dǎo)致通信失敗。

4、利用vs自帶的線程窗口來調(diào)試

優(yōu)點(diǎn):直觀,可以直接從進(jìn)程圖上看到哪個(gè)進(jìn)程是活動(dòng)進(jìn)程,哪些進(jìn)程處于阻塞狀態(tài)。

缺點(diǎn):需要結(jié)合斷點(diǎn)調(diào)試,基本上就是斷點(diǎn)調(diào)試的加強(qiáng)版

前面三種都比較基礎(chǔ)大多數(shù)人應(yīng)該已經(jīng)掌握了 ,下面針對(duì)第四種再詳細(xì)說明下:

比如以下示例:開了兩個(gè)線程

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; ;}});

我僅在第一個(gè)線程設(shè)置了斷點(diǎn),只想在第一線程跟蹤變量變化,但是實(shí)際上單步調(diào)試的時(shí)候你會(huì)發(fā)現(xiàn),程序會(huì)跳來跳去,一會(huì)兒再上面哪個(gè)線程,一會(huì)兒又在下面哪個(gè)線程執(zhí)行,

這時(shí)候的一般的做法是:

這是我做的:

  • 設(shè)置一個(gè)條件斷點(diǎn),我知道這個(gè)斷點(diǎn)只會(huì)出現(xiàn)在我正在尋找的線程上。

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

  • 單擊鼠標(biāo)右鍵,然后選擇“凍結(jié)”。

  • 但是實(shí)際上:

    凍結(jié)/解凍線程是一種不正確的方式,因?yàn)槠渌€程不執(zhí)行任何代碼。

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

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

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

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

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

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

  • 右鍵單擊并選擇“設(shè)置...”。

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

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

  • 所以所有線程都被執(zhí)行,但調(diào)試器僅在當(dāng)前線程上命中。

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。