繁体   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