我正在尝试调试一段代码,由于 C 代码中引发的某些异常,该代码在 cv2.resize
调用中意外崩溃。出于某种原因,如果我尝试将其作为 python -m pdb file.py
运行,我会收到 "Post mortem debugger finished"
消息,因此无法进入调试 session ,因为当前行再次设置为脚本的入口点。有关如何在调试器中捕获此错误的任何提示?我猜想 opencv python 包装器错误地处理错误并使整个过程崩溃,而不是引发 python 异常。 ipdb
也因某种 not self._running
断言错误而崩溃,并由于某种原因弄乱了整个终端 session :许多符号(例如换行符)未正确处理并且 clear
没有帮助。
opencv 错误是 OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0) in resize, file/io/opencv/modules/imgproc/src/resize.cpp, line 4044
。 This is opencv 源中的行,它调用 CV_Assert()
,不知道它是如何工作的。我在 python 代码中找到了导致它的一行,我在运行调整大小之前打印了图像的大小,它们都是合理的大小。
UPD:我在日志中发现了一个 ValueError: signal only works in main thread
错误,所以问题是这是另一个线程中的 C 异常。
最佳答案
问题确实是由宽度为零的图像引起的,但输出被其他线程的输出遮盖了,因为处理是在工作池中执行的。一个解决方案是以某种方式让处理代码在主线程中执行,然后 pdb 开始调试 session ,我就能够找出问题所在。
关于python - pdb 事后调试器自行完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50160981/