除錯多執行緒應用程式時,是否可以將除錯器粘合到特定執行緒?因為當我進行逐步(F7)除錯時,我經常跳到另一個執行緒中,這對于除錯來說有點糟糕:(
uj5u.com熱心網友回復:
如果我將您的問題解釋為:
“除錯時是否可以只允許執行我正在除錯的執行緒”
那么答案是肯定的。
- 設定斷點。
- 當除錯器遇到斷點時,轉到執行緒視圖。當前執行緒將標有“正在運行”圖示(在最新版本的 RAD Studio 中,它上面有一個綠色的“播放”箭頭)。
- 右鍵單擊該執行緒并選擇
Freeze all other threads.
除錯器現在將允許您單步執行當前執行緒,而不允許調度其他執行緒。
完成后,您可以右鍵單擊任何執行緒并選擇Thaw all threads
當然這會影響系統的行為,因為其他執行緒不會運行。
如果我將您的問題解釋為:
“是否可以確保斷點僅針對特定執行緒觸發”
那么答案是肯定的。
- 設定斷點。
- 右鍵單擊斷點并選擇“斷點屬性”。
- 從下拉串列中選擇一個執行緒,只有這個執行緒會在斷點處進入除錯器。
如果我將您的問題解釋為:
“是否可以讓所有執行緒運行,但僅通過除錯器中的單個執行緒單步運行(而其他執行緒運行)”
然后實際上我認為答案是否定的。您可以在每個連續的行上設定一個斷點并將斷點的屬性設定為當前執行緒,但這對于大多數單步執行來說并不實際。
請記住,在除錯任何啟用的斷點(被任何執行緒命中)時,都會評估并導致除錯器中斷,除非斷點的屬性阻止了這種情況。當單步執行時,除錯器實際上是在下一行插入斷點,因此任何碰到該行的執行緒都會導致除錯器中斷。
如果您的所有執行緒都在執行不同的代碼,這將不是問題,但如果它們正在執行通用代碼(包括庫例程和物件方法),那么任何到達下一步的執行緒都會中斷。
Another thing that may help you with single-stepping a multi-threaded application when you have a number of breakpoints set is to disable them in the breakpoints window (normally a tab in the bottom part of the debugger view) when single stepping so that hitting one of them in another thread does not cause a break to the debugger.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/438707.html
標籤:德尔福
