# MacsBug

MacsBug è un debugger a basso livello (linguaggio macchina e linguaggio assemblatore) per i sistemi operativi Macintosh precedenti al Mac OS X. MacsBug è un acronimo di Motorola Advanced Computer Systems Debugger, ideato per distinguerlo da Macintosh Debugger; in più questi processori Motorola 68000 avevano la scritta MACSS stampata in superficie. La versione originale fu sviluppata dalla Motorola come debugger generico per i suoi sistemi basati su 68000. Fu portato al Mac come strumento per programmatori molto presto.
MacsBug è richiamato premendo il cosiddetto pulsante del programmatore del Macintosh (noto come Programmer's Key o più recentemente Interrupt Key) o ancora premendo la combinazione di tasti chiamata Command-Power (cioè il tasto Mela e il pulsante di accensione). MacsBug offre molti comandi per disassemblare, ricercare e visualizzare dati e per gestire i registri del processore.
Gli utenti che entrano per errore in MacsBug per uscirne devono solo inserire la lettera G e premere return. Comunque MacsBug non è installato di default in Mac OS: poiché richiede una estensione del sistema un tipico ambiente utente non lo comprende. Tuttavia ogni Macintosh a partire dal Macintosh Plus include un debugger nella ROM, noto come MicroBug Archiviato il 13 novembre 2014 in Internet Archive.. Occasionalmente, gli utenti finali possono installarlo per avere un sistema di recupero degli errori molto basilare: poiché Mac OS classico manca di protezione della memoria un crash di una applicazione semplicemente congela l'intero sistema; invece, con MacsBug installato, al posto di un sistema non rispondente, l'utente finale ottiene la possibilità di entrare nel debugger, da dove, con alcuni comandi, può riottenere il controllo: per esempio digitando ES (Exit to Shell) può tornare alla shell, da dove forzare l'uscita dell'applicazione bloccata e riottenere l'accesso al Finder; oppure può digitare RB (ReBoot) che riavvia il sistema. Tuttavia, spesso questi tentativi non hanno successo e l'unica alternativa per riottenere un sistema funzionante è il reset hardware del sistema.
La presenza di MacsBug è indicata all'avvio: se appare la scritta "Debugger Installed" significa che è installato (è da notare tuttavia, che la scritta indica semplicemente la presenza di un software caricato nell'area di memoria riservata al debugger e che occasionalmente questo software potrebbe non essere MacsBug).
MacsBug originariamente era dedicato solo alla serie di processori Motorola 68000. Quando nel 1994 la Apple introdusse la serie Power Macintosh fece seguire un aggiornamento di MacsBug che allargava il supporto all'architettura e al set di istruzioni dei nuovi processori PowerPC.
L'ultima versione distribuita di MacsBug è la 6.6.3, datata 14 settembre 2000. Questa versione funziona con tutte le macchine prodotte nel periodo luglio-settembre 2000, inclusi Power Mac G4 (monoprocessore e multiprocessore), Power Mac G4 Cube, la famiglia iMac (Ruby, Indigo, Sage, Graphite e Snow)e la famiglia iBook (Indigo, Key Lime e Graphite).
La versione 6.6.3 include un migliore supporto per il debugging di task MP e corregge alcuni bug molto seri nei comandi per modificare le impostazioni di memoria, quando usati nello spazio di I/O delle periferiche di tipo PCI. Può anche essere usato nell'ambiente Classic eseguito in macOS, nel quale è possibile caricarlo premendo insieme i tasti "?" e "?", oppure "?" e "F12" nei sistemi senza il tasto di eiezione (Eject key).
Mac OS X consente ai programmatori di usare i familiari comandi di MacsBug in GNU Debugger. Il plugin per GNU Debugger che consente ciò è incluso nel pacchetto Mac OS X Developer Tools, presente nella directory /usr/libexec/gdb/plugins/MacsBug/.
Software alternativi a MacsBug sono:
* TMON della ICOM Simulations, che contiene la tecnologia Darin Adler Extended User Area & Trap Discipline, che consente la verifica dei parametri di tutte le API Mac documentate
* The Debugger della Jasik Designs, molto più potente ma anche molto più ostico da usare causa l'intricata e non standard interfaccia utente.