2015-04-14 12 views
5

ich im Wesentlichen getan haben folgendes:Wie kann ich eine mit pstats.dump_stats (Dateiname) erstellte Datei offline analysieren?

import cProfile, pstats, StringIO 
pr = cProfile.Profile() 
pr.enable() 
# ... my code did something ... 
pr.disable() 
s = StringIO.StringIO() 
sortby = 'cumulative' 
ps = pstats.Stats(pr, stream=s).sort_stats(sortby) 

ps.dump_stats('stats.dmp') # dump the stats to a file named stats.dmp 

So, jetzt habe ich die Datei mit dem Namen 'stats.dmp' gespeichert offline.

Wie kann ich Pstats verwenden, um diese Datei für den menschlichen Verzehr zu analysieren?

Vielen Dank im Voraus.

Antwort

8

Hier ist, was ich herausgefunden habe und das Python-Programm, das ich generiert habe. Ich testete dies mit einer .dmp-Datei, die unter Linux & erstellt wurde, die auf Windows XP analysiert wurde. Es hat gut funktioniert. Die Python-Datei heißt "analyze_dmp.py".

#!/usr/local/bin/python2.7 
# -*- coding: UTF-8 -*- 
"""analyze_dmp.py takes the file INFILEPATH [a pstats dump file] Producing OUTFILEPATH [a human readable python profile] 
Usage: analyze_dmp.py INFILEPATH OUTFILEPATH 
Example: analyze_dmp.py stats.dmp stats.log 
""" 
import sys, os 
import cProfile, pstats, StringIO 

def analyze_dmp(myinfilepath='stats.dmp', myoutfilepath='stats.log'): 
    out_stream = open(myoutfilepath, 'w') 
    ps = pstats.Stats(myinfilepath, stream=out_stream) 
    sortby = 'cumulative' 

    ps.strip_dirs().sort_stats(sortby).print_stats(.3) # plink around with this to get the results you need 

NUM_ARGS = 2 
def main(): 
    args = sys.argv[1:] 
    if len(args) != NUM_ARGS or "-h" in args or "--help" in args: 
     print __doc__ 
     s = raw_input('hit return to quit') 
     sys.exit(2) 
    analyze_dmp(myinfilepath=args[0], myoutfilepath=args[1]) 

if __name__ == '__main__': 
    main() 
+0

Dies ist ein genial einfaches Skript, mit dem Teams Profile Dumps einfach teilen können. Vielen Dank! – zerocog