TRAP II e' un utility dedicata ai programmatori alle prese con il debugging dei propri programmi. Non riuscite a capire come mai il vostro ultimo lavoro si ostina ad andare in Guru Meditation ? Volete scoprire quale istruzione genera i continui messaggi di Software Failure ? Con Trap II potete individuare facilmente la causa degli errori e tentare di porvi rimedio. Trap II cerca di fornire al programmatore il maggior numero possibile di informazioni relative allo stato del programma quando si e' verificato l'errore. Trap II si sostituisce al normale error handler del sistema: in caso di errore, quindi, non apparira' piu' il solito requester con l'avvertimento "Software Failure" seguito dal reset, ma apparira' una finestra contenente una serie di dati, spiegati piu' avanti. Per provare TrapII potete clickare due volte sulla sua icona (o lanciarlo da CLI) e successivamente eseguire il programma "Demo", contenuto nel suo stesso cassetto. Questo semplice programma genera una condizione di errore (che, senza Trap II installato, produrrebbe una Guru Meditation) e fa apparire la finestra di Trap II, che ha un'aspetto simile a questo: +ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ+ | | | | | Data Regs | Addr Regs| Address Data| | | | | | | | AD | | DR | AR |_____________| | | | | | | | Top of Stack| |___________|__________| SK | | |_____________| | SR & PC |___Trap__TP__| |________________________| | | Task TK _____________| Gadgets | |__________| GG | | Time TM | (or status) | +ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ+ DR: Il contenuto dei registri dati (Data register) al momento in cui l'errore si e' verificato (formato longword esadecimali) AR: Il contenuto dei registri indirizzi (Address register) al momento in cui l'errore si e' verificato (formato longword esadecimali). SP (A7) contiene il valore dello User Stack Pointer (USP) SR & PC: Il valore dello Status register (SR) e del Program Counter (PC) one seguente a quella che ha causato l'errore. Il PC viene mostrato in due modi: il primo valore e' quello assoluto della locazione di memoria che punta all'istruzione successiva a quella che ha generato l'errore. Il valore e' relativo all'istruzione successiva in memoria, non alla successiva che sarebbe stata eseguita se non ci fosse stato l'errore. Tramite un disassemblatore o un debugger e' quindi possibile andare a ricercare l'indirizzo puntato dal Program Counter e localizzare in quella zona di memoria l'errore. Il secondo valore del PC e' l'offset a partire dall'inizio dell'hunk al quale il Program Counter punta, seguito dal numero esadecimale che identifica l'hunk stesso (numerati a partire da 0). Quindi, ad esempio, il valore 00000002,00 indica che il PC punta ad un indirizzo che si trova due byte oltre l'inizio del primo hunk. SK: Le prime quattro longwords dello User Stack. TP: Una descrizione approssimativa che identifica il tipo di errore che si e' verificato (ad es. Bus Error, Address Error, Illegal Instruction etc.) Se l'errore non e' identificabile, ne viene mostrato solo il numero. TK: La descrizione o il nome della task o del processo che ha causato l'errore, ed il relativo indirizzo della sua struttura. TM: Il valore dell'orologio del sistema in cui l'errore si e' verificato. GG: Questo zona della finestra contiene una serie di gadget che permettono all'utente di interagire con il programma. [restart]: Se possibile, questo gadget consente di riprendere l'esecuzione del programma. [trace]: come sopra, ma con il bit trace settato. [next]: tenta di eseguire l'istruzione successiva a quella a cui il programma si e' interrotto, e poi si ferma nuovamente. Funziona solo con istruzioni del tipo BCC, BSR, DBCC e JSR [RemTask()]: Esegue la funzione RemTask() per cercare di rimuovere una task attiva. AD: Mostra le informazioni contenute nello stack frame del 68000 in caso di errori di tipo Bus o Address. ญญญญญญญญญญญญญญ+ FUNC W,I,UsDt| 33c1 | ADDR nnnnnnnn| /00000009,00| INST 33c0 | FUNC mostra informazioni specifiche relative al tipo di accesso alla memoria che ha generato l'errore La prima lettera indica il tipo di accesso (W= write, scrittura; R = read, lettura); la seconda lettera indica lo stato del 68000 al momento dell-errore (I=stava eseguendo un'istruzione, N= non stava eseguendo un'istruzione);. Il terzo valore rappresenta il codice della funzione relativa ai pin FC0, FC1 e FC2 del 68000: puo' assumere i seguenti valori: UsDt...user data UsPg...user program SpDt...supervisor data SpPg...supervisor program IAck...interrupt acknowledge ????...non identificato. La seconda linea indica il valore esadecimale del codice della funzione che il 68000 ha messo nello stack. ADDR mostra l'indirizzo che ha causato l'errore, specificato sia sotto forma di indirizzo assoluto che di offset/numero di hunk (come nel caso del Program Counter). INST mostra il valore esadecimale dell'istruzione che il 68000 stava eseguendo.