簡體   English   中英

打破單線程

[英]Breaking single thread

是否有可能在Visual Studio中破壞單個線程,而其他線程將繼續執行?

我有一個后台線程執行簡單的數據發送/接收,我希望在其他線程中逐步執行我的代碼。

打開線程視圖(Debug-> Windows-> Threads),右鍵單擊要掛起的線程,選擇“Freeze”。 選擇“解凍”將其重新置於運行狀態。

一般情況下這是不可能的,但有一些事情可能適用於特定的場景。

基本解決方案如其他地方所述,重復序列: 凍結,恢復,(等待),暫停,解凍,步驟應該導致您描述的行為,讓其他線程在目標線程暫停時在后台運行。

這種方法至少有兩個問題:

  • 這很乏味
  • 您的后台線程將在調試器暫停時暫停。

改進

可以使用不同的過程解決第一個問題:在立即窗口中發出Thread.Sleep(10000) ,有效地保持聚焦線程占用而其他線程正常執行。 您甚至可以將該命令綁定到宏。

第二個問題只能通過不需要暫停調試器的方法來解決。 但是,當會話沒有暫停時,我們如何檢查狀態? 這就是IntelliTrace的用武之地,但您可能會發現需要創建自定義IntelliTrace事件 這種方法的缺點是你不能手動修改飛行中的狀態。

設置一個計數器,為每個創建的線程執行一個計數器,然后將斷點設置為在條件上中斷並為該計數器選擇一個值。 我認為這不會適用於所有情況,特別是PLINQ,但在很多情況下都應該可行。

您始終可以根據當前線程的屬性(如名稱或ID)設置條件斷點。

你也可以找到這個有用的: http//www.codeproject.com/Tips/396617/Conditional-Breakpoint-using-Make-Object-Id-featur

這在VS2008中對我有用,至少應該在2010年以類似的方式工作

我可以找到的是,您可以通過設置更改進程級別的行為

  • 工具 - 選項 - 調試 - 常規 - 在一個進程中斷時中斷所有進程

但不是在Thread基礎上。

暫無
暫無

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

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