我有一個多線程的代碼,在某些情況下掛起。我想知道什麼是推薦的調試方式?如何調試掛起的代碼
回答
當它掛起時,您可以附加調試器並檢查線程狀態(包括調用堆棧)到您的心臟內容。通常會有一個(或多個)線程處於等待狀態,您可能會弄清楚原因。
如果在掛起時狀態不是不言自明,那麼您可以使用建議的技術來爲前面的程序流提供上下文信息。
因爲它是多線程的,所以不能進行調試,比如設置斷點,跟蹤語句並暫停查看變量的值。我認爲唯一的方法是打印到控制檯並從那裏查看狀態。
它是否經常掛起(即你不需要等待幾小時/天的掛起)?如果它很少掛起 - 抓取完整轉儲(即使用任務管理器)稍後用WinDbg進行調試。 如果它足夠掛起 - Visual Studio更容易使用 - 只需附加(調試 - >附加到進程)以按照前面的建議掛起進程(除非使用Express版本 - 「附加」不是它的一部分)
VS中最有用的視圖是Debug - > Window - > Threads在一個窗口中,Debug - > Call Stack在另一個窗口中。跳過所有線程,看看是否有線程正在等待某些公共對象。
有很多關於如何使用WinDbg調試掛起的信息 - 搜索「windbg sos hang」以查找詳細信息。即http://blogs.msdn.com/b/tess/archive/2009/10/19/net-hang-case-study-the-danger-of-locking-on-strings.aspx
退房波多黎各馬里亞尼的博客 - http://blogs.msdn.com/b/ricom/archive/2010/06/04/debugging-multi-threaded-applications-some-tidbits.aspx
在跟蹤:這是非常有用的,但要小心不要用跟蹤代碼引入更多的鎖定問題。即控制檯輸出調用速度較慢並且序列化,因此您的掛起可能會消失。
- 1. Netbeans:C代碼調試開始掛起
- 2. 如何調試掛起的Java線程?
- 3. 如何調試arm9 2.4.19 linux掛起?
- 4. 如何調試SSL https掛起ERR_CONNECTION_TIMED_OUT
- 5. 如何在掛起時調試`rails s`?
- 6. 掛起的進程,調試
- 7. 如何防止掛起此Java代碼
- 8. 嘗試獲取響應代碼時代碼會掛起
- 9. 調試內核掛起
- 10. Chrome調試器掛起
- 11. 調試Javascript掛起系統
- 12. VS2008調試器掛起
- 13. Windows鍵盤掛鉤掛起調試器
- 14. Eclipse在掛接調試器時掛起
- 15. Objective-C代碼掛起
- 16. 串聯代碼掛起
- 17. 如何使用Flash Builder 4調試Flex 4中的掛起/掛起web服務?
- 18. 如何調試openGL代碼?
- 19. 如何調試typelevel代碼?
- 20. 如何調試nativescript代碼?
- 21. 如何調試Haskell代碼?
- 22. 如何調試AngularJS代碼?
- 23. 如何調試Rexx代碼?
- 24. 如何調試Erlang代碼?
- 25. 如何調試代碼Linqpad
- 26. 如何調試ruby代碼?
- 27. 如何調試要測試的代碼
- 28. 如何調試轉碼的JavaScript代碼?
- 29. Emacs:如何調試掛鉤?
- 30. 如何調試react-scripts掛?
如果你不給我們一個你在做什麼的想法,我們不能幫你 – 2010-11-30 01:09:31
一個真正的質量questionn,但它是我最愛的標題:D – 2010-11-30 01:14:22