簡體   English   中英

調試多線程應用程序時的步驟

[英]Step line when debugging multithreaded application

在調試Visual Studio中的多線程程序時,基於“跨過”問題,請考慮以下情形:

運行一些代碼的線程A啟動線程B,並一直進行到線程A需要線程B的結果為止。為了理智,讓我們假設以下方案:

Thread A
    line 1 // <---- Starts Thread B
    line 2
    line 3 // <---- Breakpoint
    line 4
    line 5 // <---- Wait for Thread B

Thread B
    line 1
    line 2 // <------ When the code breaks, stoped here
    line 3
    line 4

一點擊“跳過”按鈕會發生什么?

我可以想到三件事:

  1. A轉到第4行。B停留在第2行,直到按下“繼續”按鈕。
  2. A轉到第4行。B轉到第3行
  3. A轉到第4行。雖然A不要在第4行停下來,但B會無限期地前進。 一旦A再次停止,B就會停止。 這意味着B可以在第4行中,也可以在A從第3行到第4行時退出。

如果要求我猜測,我會選擇選項3。

在那一行之后,有一種方法可以像我的選項2一樣逐行調試線程? 我在問是否有C ++調試器能夠停止所有線程並逐個逐行執行

Windbg的step命令p允許您指定要繼續執行的線程,而所有其他線程保持凍結狀態。 參見http://msdn.microsoft.com/zh-cn/library/windows/hardware/ff553496(v=vs.85).aspx

具體看一下命令開頭的可選[~ Thread]

暫無
暫無

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

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