使用 cx_freeze 时获取 Python 堆栈跟踪

Get Python stack trace while using cx_freeze

我有一个用 Python 编写的数据采集程序,我将其作为可执行文件(使用 cx_freeze)分发给我的协作,因为我不想打扰他们安装 Python 并安装所有软件依赖项。该计划已经运作良好一年了。最近,程序开始崩溃(崩溃,不是脚本错误,即Python虚拟机本身崩溃)。所以我想知道是什么库导致了这个问题。这个问题是随机发生的,所以很难系统地查明原因。

我了解了 faulthandler,我想将它与我的 cx_freeze 一起使用,因为我无法确定问题是由于 cx_freeze 本身还是由于到其他图书馆。

问题:我怎样才能生成一个 cx_freeze 可执行文件,它将使用 faulthandler

我试过的:

我当前的 cx_freeze 安装脚本如下:

import sys
from cx_Freeze import setup, Executable
from GUI.Meta import *

target = Executable("Main.py",
                    #base = "Win32GUI",
                    icon = "GUI\icon.ico",
                    compress=True,
                    targetName="Prog.exe")

setup(
    name = "My Software",
    version = SOFTWARE_VERSION,
    description = "",
    executables = [target])

我尝试用 Main.py -q -X faulthandler 替换我的可执行部分 Main.py,但这没有用。使用 import faulthandlerfrom faulthandler import * 在我的 cx_freeze 安装文件中导入 faulthandler 没有帮助。

请指教

附加信息:我正在使用的依赖项(如果您可能知道问题的可能原因):PySide、Sympy、Numpy、H5py、PySerial、Matplotlib

我了解到我可以使用 procdump。可以从 here 下载。这是一个非常简单的程序,可以记录堆栈跟踪。您可以将其用于:

C:\>procdump -ma -i c:\Dumps

这会将崩溃的任何程序的堆栈跟踪转储到该文件夹​​。