假設我正在使用 GDB 除錯一個多執行緒程式。
我在一個執行緒的斷點處停了下來;我輸入的執行緒next 3(或step 3或類似的);此時另一個執行緒遇到斷點,GDB 切換到那個(scheduler-locking關閉)。
是否保證第 1 個執行緒在第 2 個斷點停止時運行不超過 3 行?
第一個執行緒運行 2 行,GDB 切換到第二個,然后第一個運行 1000 多行,然后 GDB 在斷點處停止(在第二個執行緒中),這不可能嗎?
我不確定我可以從檔案中設計出這個。
uj5u.com熱心網友回復:
在您的情況下,第一個執行緒永遠不會執行超過 3 個next操作。
GDB 將在內部設定斷點,以確保第一個執行緒執行單個next,然后設定所有執行緒運行。然后 GDB 將等待執行緒停止。
如果第一個執行緒停止,則 GDB 將為第二個執行緒設定next并重新啟動第一個執行緒運行。
重復第三個next。一旦完成,所有執行緒都將停止并將控制權回傳給用戶。
但是,在此程序中的任何時候,另一個執行緒可能會因其他原因停止。如果發生這種情況,GDB 將請求所有執行緒停止,并將控制權傳回給用戶。
但是,由于已經為 a 設定了第一個執行緒next,因此該執行緒可以繼續進行的最遠距離是直到其當前next操作結束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491893.html
