import time,sys import __init__ from leo_sdr_common import * from test_common_function import * from leo_sdr_test_report import testReport from logger import logger_setup from leo_sdr_xsct import theXSCTInterface def test_proc(): report = testReport(sys.argv[0]) test_name = 'RBT_test_debug' logger_setup(f'{test_name}.log') # per instrumentare il codice a livello di debug dei breakpoints si inseriscono a lato della riga di # codice uno o piu commenti nella forma : __XSCT_DEBUG__@:BP# # fatto questo findBreakPoints trovera tutti i breakpoints organizzati in un dizionario ha chiave multipla test_name/file/id res = theXSCTInterface.findBreakPoints('BLACK',test_name) logging.info(res) #organizzo i risulati ( che devo cmq. aver noto ) ln0 = res[test_name]['src_ct_oe/Services/SC_BiteService/CSCBiteService.cpp']['0'] ln1 = res[test_name]['src_ct_oe/CfCtrl/SC_SysCtrl/CSCSysCtrlBitIf.cpp']['1'] ln2 = res[test_name]['src_ct_oe/CfCtrl/SC_SysCtrl/CSCSysCtrlBitIf.cpp']['2'] #organizzo i dizionari dei brekpoints bp0 = dict(file='src_ct_oe/Services/SC_BiteService/CSCBiteService.cpp', line=ln0, id=None, address=None) bp1 = dict(file='src_ct_oe/CfCtrl/SC_SysCtrl/CSCSysCtrlBitIf.cpp', line=ln1, id=None, address=None) bp2 = dict(file='src_ct_oe/CfCtrl/SC_SysCtrl/CSCSysCtrlBitIf.cpp', line=ln2, id=None, address=None) # li metto in uma lista ( per comodita' breakpoints = ( bp0, bp1, bp2 ) report.open_session('Pre Conditions') # mi collego al demone che gira du SDK setValue(theXSCTInterface,True,'Connect') # configuro il debugger per il tipo di target ( RED|BLACK ) setValue(theXSCTInterface,'BLACK','Init') # itero sui breakpoints per recuperare i'id e il relativo indirizzo ( esco in caso di errore ) for b in breakpoints: b['id'],err = getValue(theXSCTInterface,'BreakPointSet',b['file'],b['line']) if err : return b['address'],err = getValue(theXSCTInterface,'BreakPointAddress',b['id']) if err : return report.close_session() print(breakpoints) try: ############ BEGIN STEPS ############ report.open_session('Test Execution') # il primo breakpoint e' per default sulla prima istruzione del main ... # gli dico al debugger di fare run/continue con un timeout massimo di 10 secondi setValue(theXSCTInterface,10,'Continue') # leggo l'indirizzo corrente cur,err = getValue(theXSCTInterface,'CurrentAddress',hex=True) logging.info(f'cur address is 0x{cur:X}') # # .. continuo il debugger ( sara' in statio running ) setValue(theXSCTInterface,10,'Continue') # uscito dalla funzione ( o perche sono in un breakpoint o perche sono trascorsi 10 secondi ) leggo lo stack cur,err = getValue(theXSCTInterface,'Stack') logging.info(f'stacktrace:\n{cur}') # controllo che l'indirizzo dello stack effettivamente coincide con quello del breakpoint # 0 check(theXSCTInterface,bp0['address'],'CurrentAddress',hex=True) # modifico la variabile locale a_ul32LastV = 1 # valore, funz, nome variabile setValue(theXSCTInterface,1,'SetVar', 'a_ul32LastV') # continuo ... setValue(theXSCTInterface,10,'Continue') # controllo che l'indirizzo dello stack effettivamente coincide con quello del breakpoint # 1 check(theXSCTInterface,bp1['address'],'CurrentAddress',hex=True) # continuo ... setValue(theXSCTInterface,10,'Continue') # mi rifermero al primo bp e ... check(theXSCTInterface,bp0['address'],'CurrentAddress',hex=True) # ri-modifico la variabile locale a_ul32LastV = 0 setValue(theXSCTInterface,0,'SetVar', 'a_ul32LastV') # .. cosi facendo dovrei fermarmi al secondo bp setValue(theXSCTInterface,10,'Continue') check(theXSCTInterface,bp2['address'],'CurrentAddress',hex=True) except Exception as e: report.add_comment(f"Test terminated unexpectedly :{e}") finally: report.close_session() ############ END STEPS ############ report.open_session('Post Conditions') #getVectorCastDump() report.close_session() report.generate_pdf() if __name__ == '__main__': test_proc()