簡體   English   中英

如何使用python調試死鎖?

[英]How to debug deadlock with python?

我正在開發一個多線程應用程序,它正在陷入僵局。

我正在使用Visual C ++ Express 2008來跟蹤程序。 一旦發生死鎖,我就暫停程序並跟蹤。 我發現當發生死鎖時,我的C ++擴展中會有兩個名為python的線程。

所有這些都在python代碼中使用Queue,所以我猜死鎖可能是由Queue引起的。 但是,一旦擴展進入python代碼,我從VC ++調試器中看不到asm代碼和二進制文件。

我想知道有沒有辦法在我暫停程序后轉儲python代碼的調用堆棧? 我怎么知道線程中的鎖是什么造成了死鎖?

如果您可以使用gcc編譯擴展模塊(例如,使用Cygwin ),則可以使用gdb和pystack gdb宏來獲取Python堆棧。 我不知道是否可以在Visual C ++ Express中執行與pystack相同的操作,但是無論如何你都可以從pystack宏實現中獲得一些想法。

既然你提到你只在VC ++調試器中看到asm / binary,你應該確保用調試符號編譯Python。 如果VC ++仍然顯示asm,可能需要告訴VC ++源文件在哪里(抱歉,多年來沒有使用過VC ++,所以如果是這樣的話,我不知道你可能需要做什么) 。

您可能還會通過向代碼添加大量日志記錄調用來獲取一些重要信息,包括Python端和C ++擴展。

無論如何,我幾乎可以肯定死鎖不是由Queue引起的,而是你自己的代碼。

暫無
暫無

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

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