2016-07-04 111 views
2

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

我学到了关于faulthandler,我想用它与我的cx_freeze,因为我不能确定问题是由于cx_freeze本身或由于其他库。

问题:如何生成将使用faulthandler的cx_freeze可执行文件?

我的尝试:

我目前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,但没有奏效。在我的cx_freeze安装文件中导入faulthandlerimport faulthandlerfrom faulthandler import *没有帮助。

请指教。

附加信息:我使用的依赖关系(如果你知道这个问题的一个可能的原因):PySide,Sympy,numpy的,H5py,PySerial,Matplotlib

+0

base = None;如果sys.platform ==“win32”: :;; base =“Win32GUI”;从:http://cx-freeze.readthedocs.io/en/latest/distutils.html#distutils-setup-script,如果cmd在windows下:base =“console”(法语名称) – Destrif

+0

@Destrif对不起,错误处理者将如何发挥作用? –

+0

@Destrif不一定是进口问题。实际上导入看起来是错误的,因为'faulthandler'通常在Python命令行中使用'Python Main.py -q -X faulthandler'来调用。没有'错误处理者',没有任何问题。所以我的问题是如何在使用cx_freeze时获取我的程序的堆栈跟踪。 –

回答

0

我才知道,我可以用procdump。它可以从here下载。这是一个非常简单的程序,可以记录堆栈跟踪。您可以使用它:

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

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