2011-11-03 46 views
2

有沒有什麼辦法可以讓gdb在每次執行pthread時都停頓?在線程切換時暫停gdb

說我有兩個POSIX線程(線程A和線程B)正在運行,我希望gdb停止線程A被掛起和線程B繼續執行(和其他方式)。

回答

3

我想,當一個線程被掛起GDB制止和線程B繼續執行

你的問題是假設一個單核電腦,這是極其罕見的現在。

如果你有一個多核CPU,那麼 A和B將同時執行,你的問題是沒有意義的。

即使假定您正在單核CPU上執行,您所要求的功能(我預期)也是無用的:典型的多線程程序會在兩個線程之間切換幾萬次達到任何「有趣」的代碼。當然你不想continue 10,000次?

在調試多線程代碼時,通常希望assert各種不變量在程序執行過程中保持不變。設置斷點和單步執行很少有助於多線程調試。

+0

我在嵌入式系統中的單個處理器上使用QNX操作系統。我可能在這裏錯了,但是在同一個處理器上連續運行同一進程的線程並不是不同的 - 即使在多核CPU上也是如此。 – MBober

+0

是的,你錯了。多線程的重點在於使單個應用程序可以同時在多核機器中使用多個內核*。 –

+0

問題是我的程序崩潰了整個操作系統,所以我不能確定是否所有的調試消息都是在崩潰之前交付的。當我逐步完成程序時,一切正常。這就是爲什麼我認爲這是一個計時問題。所以我需要找出哪個線程運行時追蹤問題。我注意到,gdb在SIG32中停止,當SIG32的優先級發生變化時它將被髮送到線程。我希望在恢復gdb可能暫停的線程上有相同的信號。 – MBober