2016-07-04 107 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 

並且這將轉儲任何崩潰到該文件夾​​的程序的堆棧跟蹤。