pdb post mortem 调试器自行完成

pdb post mortem debugger finishes itself

我正在尝试调试一段代码,由于 C 代码中引发的某些异常,该代码在 cv2.resize 调用中意外崩溃。出于某种原因,如果我尝试 运行 它作为 python -m pdb file.py 我收到 "Post mortem debugger finished" 消息,因此无法进入调试会话,因为当前行再次设置为脚本的入口点。有关如何在调试器中捕获此错误的任何提示?我猜想 opencv python 包装器不正确地处理错误并使整个过程崩溃,而不是引发 python 异常。 ipdb 也因某种 not self._running 断言错误而崩溃,并由于某种原因弄乱了整个终端会话:许多符号(例如换行符)未正确处理并且 clear 无济于事.

opencv 错误为OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0) in resize, file /io/opencv/modules/imgproc/src/resize.cpp, line 4044This is opencv 源中的行,它调用 CV_Assert(),不知道它是如何工作的。我在 python 代码中发现了导致它的一行,我在 运行 调整大小之前打印了图像的大小,它们都是合理的大小。

UPD:我在日志中发现了一个 ValueError: signal only works in main thread 错误,所以问题是这是另一个线程中的 C 异常。

问题确实是由宽度为零的图像引起的,但输出被其他线程的输出遮盖了,因为处理是在工作池中执行的。一个解决方案是以某种方式让处理代码在主线程中执行,然后 pdb 开始调试会话,我就能够找出问题所在。