profiler.py 2.34 KB
Newer Older
German Leon's avatar
German Leon committed
1
2
import gdb

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import time
import re
import sys
import common_functions as cf 
from classes.BitFlip import BitFlip

def exit_handler(event):
   global nosalir
   nosalir=False
   print(str("event type: exit"))
   try:
        print("exit code: {}".format(str(event.exit_code)))
   except Exception as err:
        err_str = "ERROR: {}".format(str(err))
        print(err_str)

"""
Handler that will put a breakpoint on the kernel after
signal
"""

def set_event(event):
      global trun,ocurrencias,t,primera
      
      print ("Es mi primera vez"+ str(primera)+"  "+str(ocurrencias))
      if (isinstance(event, gdb.BreakpointEvent)):
        if (primera):
          
          t=time.time()
          print ("Tomo tiempo " + str (t))
          ocurrencias=ocurrencias+1
        else:  
          print ("Para tiempo " + str (time.time()))
          trun=(time.time()-t)
        primera=not primera  
    #  else:  
    #      trun=(time.clock()-t)  
German Leon's avatar
German Leon committed
40
41
42
"""
Main function
"""
43
44
45
46
47
48
49
50
51
52
53
def main():
  global ocurrencias,t,nosalir,trun,primera
  primera=True	;
  ocurrencias=0;


  # Initialize GDB to run the app
  gdb.execute("set confirm off")
  gdb.execute("set pagination off")
  gdb.execute("set target-async off")
  gdb.execute("set non-stop off")
German Leon's avatar
German Leon committed
54

55
56
  # Connecting to a exit handler event
  gdb.events.exited.connect(exit_handler)
German Leon's avatar
German Leon committed
57

58
59
  # Connecting to a stop signal event
  gdb.events.stop.connect(set_event)
German Leon's avatar
German Leon committed
60

61
62
63
64
65
66
67
68
69
70
  # gdb_init_strings = str(os.environ["CAROL_FI_INFO"])
  gdb_init_strings = arg0
  cadena=gdb_init_strings.split(";",3)
 
  print >>sys.stderr, (cadena[0]) #,"-",cadena[0],"-",cadena[1],"-", cadena[2],"#". cadena[3])
  section =cadena[0]=="True" 
  onlycount=cadena[1]=="True" 
  #print ("B "+section+"ke "+kernel_end+" ....")
  #print (cadena[2].split(";"))
  for init_str in  cadena[3].split(";"):
German Leon's avatar
German Leon committed
71
     gdb.execute(init_str)
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  maxi=0.  
  gdb.execute("r")
  if (onlycount):     
    ks=cadena[2].split(",") 
    print (ks)
    listreg=set ()
    for x in ks:
     listreg.update(BitFlip.numreg(x) ) 
    print(listreg)
    maxi=len(listreg)
    print("Maximo..."+str (maxi)+" o  "+str(max([int(x) for x in listreg] ) ))
    
  else:
     if (section):
       gdb.execute("c")
     else:
       gdb.execute("finish")
  
     f=open("tmpxxx_return_profiler.conf","w")
     f.write("[DEFAULT] \nOcurrencias = "+str(ocurrencias)+"\nTiempo = "+str(trun)+"\n")
     f.close()	
  sys.exit(maxi)  
German Leon's avatar
German Leon committed
94

95
main()