La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.

Per determinare il kernel, è necessario connettersi al computer utilizzando un cavo a modem zero o una connessione modem. Un computer di debug sarà chiamato "host" e il nome "bersaglio" riceverà un problema.

Entrambi i computer dovrebbero funzionare a eseguire la stessa versione di Windows e i file di caratteri per il computer di destinazione devono essere installati sul computer host. I file simbolici sono forniti sul CD di installazione di Windows nel supporto \\ Debug Directory.

Per abilitare il debug, è necessario apportare modifiche al file Boot.ini sul computer di destinazione.

1. Cambia gli attributi dei file boot.ini:

attrib C: \\ boot.ini - R - S

2. Modifica questo file e nella stringa startup di Windows Aggiungi il parametro / debug (per segnalare il sistema sulla necessità di download in ram Debugger di base scarica Windows.). Parametri aggiuntivi Questi sono / Debugport, che riportano il sistema, che la porta COM deve essere utilizzata (predefinita COM2) e / BAUDRATE - per specificare la frequenza di trasferimento dei dati (valori predefiniti, la velocità del 19200 Baud, ma è meglio usare 9600). Per esempio:


Multi (0) Disk (0) RDISK (0) Partition (0) \\ Windows \u003d "Windows NT" / Debug / Debugport \u003d Com2 / Baudrate \u003d 9600

3. Salva il file.

4. Installa gli attributi del file Boot.ini precedente:

attrib C: \\ boot.ini + r + s

NEL questo esempio Il computer di destinazione ha consentito la connessione attraverso la porta COM2 ad una velocità di 9600 bit / s.

Il computer host deve essere configurato utilizzando i parametri necessari per il debug. Inoltre, è necessario installare i file simbolici. Per installarli, vai alla directory \\ Support \\ Debug nel CD di installazione e immettere il seguente comando:

exndsym. : <целевой диск и каталог>

Per esempio:

eXPNDSYM F: D: \\ Simboli

L'installazione potrebbe richiedere del tempo. Ricordare che se i pacchetti di aggiornamento sono stati installati sul computer di destinazione, questi file di caratteri pacchetti dovrebbero essere installati anche sul computer host. I file simbolici per i pacchetti di aggiornamenti possono essere scaricati dal sito di Microsoft.

La fase successiva è configurare le variabili di ambiente necessarie per il debug, ad esempio, variabili che indicano la posizione dei file simbolici, ecc. Quanto segue è una descrizione di queste variabili.

Descrizione delle variabili sistemiche

La definizione di queste variabili può essere inserita in file di comando. Per evitare di inserire i comandi corrispondenti quando si scarica ogni download:

echo Off.
Set _nt_debug_port \u003d com2
Set _NT_DEBUG_BAUD_RATE \u003d 9600
Set _nt_symbol_path \u003d D: \\ simboli \\ i386
Set _NT_LOG_FILE_OPEN \u003d D: \\ Debug \\ logs \\ debug.log

Ora è necessario copiare il software di debug del core che si trova nel supporto \\ Debug Directory \\<процессор> Sul CD di installazione (supporto \\ debug \\ i386). Il modo più semplice per copiare l'intera directory è completamente, poiché ha una dimensione ridotta (circa 2,5 MB). Per la piattaforma I386, viene utilizzato il debugger, che viene fornito come file i386kd.exe. Il debugger inizia a utilizzare il comando i386KD. Per inserire il comando, fare clic sulla combinazione di tasti E attendere fino a quando appare l'invito riga di comando KD\u003e.

I debugger della modalità del kernel sono tra la CPU e il sistema operativo. Ciò significa che quando si interrompe il debugger della modalità del kernel, il sistema operativo è anche completamente interrotto. È facile capire che la transizione sistema operativo Una fermata affilata è utile quando lavori con problemi di timer e sincronizzazione. Tuttavia, ad eccezione di un debugger, che sarà descritto di seguito (nella sezione "Softlce Debugger" di questo capitolo), è impossibile eseguire il debug del codice della modalità utente utilizzando i debugger della modalità kernel.

I debugger della modalità del kernel non sono così tanto. Ecco alcuni di questi: Windows 80386 Debugger (WDEB386), Debugger del kernel (1386KD), Windbg e Softlce. Ognuno di questi debugger è brevemente descritto nelle seguenti sezioni.

WDEB386 Debugger.

WDEB386 è un debugger del kernel di Windows 98 distribuito come parte della piattaforma SDK. Questo debugger è utile solo per gli sviluppatori, scrivendo i driver virtuali dispositivi Windows. 98 (VXD). Come la maggior parte della modalità Kernel Debugger per i sistemi operativi Windows, il debugger WDEB386 richiede due macchine e cavo a modem zero per il funzionamento. Due macchine sono necessarie perché parte del debugger, che viene eseguita sulla macchina di destinazione, ha accesso limitato al suo hardware, in modo che invia il suo output e riceve comandi da un'altra macchina.

Il debugger WDEB386 ha una storia interessante. È iniziato come uno strumento di sfondo interno Microsoft in Era Windows 3.0. Era difficile usarlo, e non aveva sufficiente supporto per il debug codice sorgente E altre piacevoli proprietà che Visual C ++ e difendi di base di Visual di base sono stati viziati.

La squadra "Spot" (Dot) è la caratteristica più importante di WDEB386. Attraverso l'interrupt Int 41, è possibile estendere WDEB386 per aggiungere comandi. Questa estensibilità consente agli autori dei driver VXD di creare comandi di debug personalizzati che conferiscono loro l'accesso gratuito alle informazioni nei loro dispositivi virtuali. Debug versione Windows 98 supporta molti comandi DOT che consentono di osservare lo stato esatto del sistema operativo ovunque nel processo di debug.

I386KD Debugger.

Windows 2000 differisce da Windows 98 in quanto la parte effettiva del debugger della modalità del kernel è parte di NTOSKRNL. EXE - Il kernel principale del funzionamento sistemi Windows. 2000. Questo debugger è disponibile sia in configurazione del sistema operativo gratuito (laureation) e comprovata (debug). Per abilitare il debug in modalità kernel, impostare il parametro bootloader / debug per l'avvio. INI E, inoltre, l'opzione Bootloader / Debugport, se è necessario impostare il valore della porta di comunicazione della modalità del kernel del kernel, diversa dal silenzio (SOM1). I386KD viene eseguito sulla propria macchina e comunica con la macchina Windows 2000 attraverso il cavo del modem zero.

NTOSKRNL Kernel Mode Debugger. EXE rende solo ciò che è sufficiente controllare la CPU in modo che il sistema operativo possa essere debug. La maggior parte del lavoro di debug - Elaborazione simbolo, punti di interrupt estesi e smontaggio - viene eseguito sul lato di 1386KD. In una volta, il kit driver del dispositivo Windows NT 4 (DDK) ha documentato il protocollo utilizzato nel cavo del modem zero. Tuttavia, Microsoft non lo documenta più.

La potenza di 1386KD è ovvia se si guarda tutti i comandi che offre di accedere allo stato interno di Windows 2000. La conoscenza del meccanismo di funzionamento dei driver del dispositivo in Windows 2000 aiuterà il programmatore di monitorare l'output di molti comandi. Nonostante l'intera potenza, I386KD quasi non si applica mai, perché è un'applicazione console che è molto noiosa da utilizzare per il debug dei livelli di origine.

  • Autori:

    Barinov S.S., Shevchenko O.G.

  • Anno:
  • Una fonte:

    Informatica I. tecnologie del computer / Materiali VI International conferenza scientifica e tecnica Studenti, studenti laureati e giovani scienziati - 23-25 \u200b\u200bnovembre, 2010, Donetsk, Donntu. - 2010. - 448 p.

annotazione

Un'analisi comparativa del debug della modalità utente e la modalità del kernel viene applicata al sistema operativo. Microsoft Windows., distinguere differenze e problemi di organizzare quest'ultimo debug. Sulla base dei risultati ottenuti, i requisiti principali per la costruzione del regime del kernel debugger in caso di debug di emergenza e interattiva. L'analisi è stata eseguita soluzioni esistenti Per la conformità ai requisiti. In particolare, un'attenzione particolare è pagata al debugger di Debugger di Microsoft Windows.

Parte principale

Il debug è il processo di determinazione ed eliminazione delle cause degli errori nel software. In alcuni progetti, il debug richiede fino al 50% del tempo di sviluppo totale. Il debug può essere significativamente semplificato quando si utilizzano strumenti specializzati che vengono costantemente migliorati. Il principale tale strumento è il debugger, che consente di controllare l'implementazione del software, guarda la sua mossa e interferire con esso. Gli strumenti di debug del kernel sono prevalentemente utilizzati dagli sviluppatori dei conducenti.

Strumenti di sviluppo applicati software Offre un programmatore una vasta gamma di possibilità. Qualsiasi ambiente di sviluppo integrato include la possibilità di debug senza la necessità di utilizzare utilità di terze parti. Se noi stiamo parlando Sul software di sistema e in particolare i conducenti, quindi, a causa delle sue specifiche, il processo di sviluppo è estremamente difficile ed è completamente automatizzato. Tutte le fasi di sviluppo, incluso il debug, sono separate. Ognuno di essi richiede condizioni speciali: il codice del programma di scrittura viene eseguito su un full-flipper sistema informatico, Debug - sul sistema di debug, test - a seconda delle circostanze, ecc. Lo stesso debugger del regime del kernel è più complesso nello sviluppo e, di conseguenza, meno amichevole.

In generale, possiamo parlare della mancanza di debug di base. Sebbene questo mezzo sia disponibile, spesso non è necessario parlare di alternative. Ad esempio, il debugger di Debugger di Microsoft Windows ha una soglia di ingresso troppo alta. Molti programmatori parlano della prima esperienza negativa quando lo incontra, e la maggior parte delle sue possibilità rimangono bruciate.

Sulla base della struttura dello spazio indirizzo virtuale, se viene effettuato un errore nell'applicazione, di conseguenza, l'applicazione registra i dati in una posizione di memoria arbitraria, l'applicazione danneggerà solo la propria memoria e non influenzerà il funzionamento di altri Applicazioni e sistema operativo. Considerando che il codice della modalità principale è in grado di danneggiare le strutture di dati importanti del sistema operativo, che determinerà inevitabilmente a un fallimento comune. Il conducente scritto in modo inefficiente può anche causare una grave degradazione dell'intero sistema operativo.

    I moderni debugger forniscono quanto segue funzioni base:
  • debug a livello di codice sorgente;
  • gestione dell'esecuzione;
  • visualizza e cambia memoria;
  • visualizza e modifica il contenuto dei registri del processore;
  • visualizza la pila di chiamate.

Per facilitare il lavoro con il codice di smontaggio, i cosiddetti sono usati. Debug di caratteri. Durante il lavoro del linker, oltre all'immagine del file eseguibile, può essere creato anche un file di dati contenente informazioni contenenti che non è necessario quando si esegue il programma, ma è estremamente utile quando si debugge: i nomi delle funzioni, globali Variabili, descrizione delle strutture. I caratteri di debug sono disponibili per tutti i file di sistema operativi Windows eseguibili.

Nell'ambito del controllo dell'esecuzione significa la capacità di interrompere e rinnovare l'esecuzione del codice del programma per ottenere un comando specificato nel codice del programma. Se il codice del programma è eseguito in modalità passo-passo - L'interruzione avviene per ogni linguaggio di programmazione Lexeme o quando si lascia la subroutine. Con l'esecuzione gratuita, l'interruzione dell'esecuzione avviene in sezioni avanzate del codice - luoghi in cui sono installati i punti di arresto.

Durante l'interruzione del codice della modalità principale, si verifica il seguente dilemma. Il debugger per interagire con il programmatore utilizza l'interfaccia utente. Quelli. Al minimo, la parte visibile del debugger viene eseguita in modalità utente e utilizza naturalmente l'interfaccia di programmazione dell'applicazione ( API di Windows.), che a sua volta si affida ai moduli della modalità del kernel. Pertanto, la sospensione del codice della modalità principale può portare al blocco reciproco: il sistema smetterà di rispondere alle richieste degli utenti.

Per accedere alla memoria del kernel, i componenti del debugger devono essere eseguiti anche nella modalità del kernel. Ciò porta all'emergere di due problemi contemporaneamente, che sono evidenti conseguenze dell'organizzazione della memoria nella modalità processore protetta.

Il primo problema riguarda la trasmissione degli indirizzi di memoria virtuale. I conducenti interagiscono costantemente con le applicazioni del regime utente aggiungendo l'accesso alla loro memoria. Il sistema operativo Windows trasmette gli indirizzi virtuali al fisico, guidato dal concetto di contesto del flusso. Il contesto del flusso è una struttura che riflette lo stato del flusso e incluso, in particolare, un insieme di registri e alcune altre informazioni. Quando il controllo viene trasmesso a un altro flusso, sorge un interruttore di contesto, in cui vengono salvate le informazioni su un flusso e le informazioni sull'altro. Quando si passa al contesto del flusso in un flusso di un flusso di un altro processo, anche la directory di pagina utilizzata per trasmettere gli indirizzi virtuali è commutata.

La peculiarità è che quando le chiamate del sistema di dispacciamento, il sistema operativo Windows non cambia il contesto. A causa di ciò, il codice della modalità del kernel può utilizzare l'indirizzo virtuale della modalità utente.

In caso contrario, la situazione è quando si interrompe o l'esecuzione di thread del sistema. L'interrupt può verificarsi in qualsiasi momento, quindi è impossibile prevedere quale sia utilizzato il contesto del flusso. I flussi sistemici non appartengono a alcun processo e non possono trasmettere l'indirizzo virtuale della modalità utente. Da qui ne consegue che in queste situazioni è impossibile fare riferimento alla memoria del regime dell'utente.

Il secondo problema è di fare appello alla memoria mobile. La maggior parte delle informazioni in memoria è mobile e in qualsiasi momento può essere spostata da memoria fisica sul hDD Nel file di pagina. Se si fa riferimento alla pagina che è assente nella memoria fisica, in una situazione normale, il processore genererà un'interruzione della memoria del gestore della memoria e di conseguenza, la pagina verrà letta dal file della pagina e caricato nel memoria fisica.

Il comportamento descritto viene violato se il codice del programma di Debugger è costretto a utilizzare un alto livello di interruzione della query di interruzione (livelli di richiesta di interrupt, IRQL). Con IRQL, che coincide o superando il gestore di memoria IRQL, la signora non sarà in grado di caricare la pagina mancante, perché Il sistema operativo bloccherà il guasto della pagina di interruzione. Ciò porterà al crollo del sistema operativo.

Il debug è accettato per interattivo e di emergenza. Con il debug locale interattivo, il debugger viene eseguito nello stesso sistema dell'oggetto di debug. Con il debug interattivo remoto, il debugger e l'oggetto di debug vengono eseguiti in diversi sistemi. Durante il debug del codice del kernel, il sistema deve essere monitorato, a partire dai primi passaggi del download, quando la rete non funziona ancora, quindi, le semplici interfacce seriali, come COM, FireWire, USB, sono utilizzate per comunicare i sistemi. Di recente, a causa delle tendenze nello sviluppo della virtualizzazione del software a diversi livelli di astrazioni, sempre più attira macchine virtuali. Guestside OS funge da debugged, il sistema operativo collocato include l'interfaccia utente di Debugger.

Pertanto, per il debug di emergenza, non è necessario installare uno strumento di debug sul computer di prova. La distribuzione del sistema operativo Windows include meccanismi per l'attuazione del debug di emergenza. Prima di riavviare, il sistema operativo può salvare le informazioni sul suo stato che lo sviluppatore può analizzare e scoprire la causa. Questa informazione memorizzata in un file è denominata una discarica di memoria.

I mezzi principali per il debug della modalità principale sono forniti dal produttore del sistema operativo Windows all'interno del quadro di un pacchetto di distribuzione gratuito " Strumenti di debug. Per Windows. " Gli strumenti includono rispettivamente i dispositivi grafici e console di Windbg e KD, rispettivamente (di seguito Debugger di Windows). Il lavoro di questi debugger si basa sui meccanismi previsti dagli sviluppatori del sistema operativo e posati nel suo kernel.

La modalità principale per Windows Debugger è la modalità Interpreter Command. Grazie struttura modulareInsieme agli sviluppatori spediti comandi di Windows. Debugger supporta moduli di terze parti chiamati estensioni. Infatti, i comandi più incorporati sono anche decorati sotto forma di estensioni.

Debugger di Windows è focalizzato sul debug interattivo e di emergenza remoto, quando si utilizzano tutte le sue capacità sono rivelate. Allo stesso tempo, il debug interattivo locale a pieno titolo non è supportato: il debugger consente di visualizzare alcune strutture del kernel.

Esiste un modulo di estensione per il debugger di Windows chiamato LiveKD, creato da Mark Russinianovich, che in alcuni senso implementa il debug interattivo locale. Livekd on the go crea una discarica della memoria del sistema di lavoro e lo usa per il debug.

Gli strumenti "Strumenti di debug per Windows" sono regolarmente aggiornati e supporta tutti i moderni sistemi operativi Windows.

Il debugger del kernel di Softice, prodotto da Compuware nel pacchetto software Driverstudio, tradizionalmente eseguito un'alternativa agli "Strumenti di debug per Windows". Caratteristica distintiva Softice è stata l'implementazione del debug interattivo locale sull'hardware supportato. Il debugger potrebbe controllare quasi completamente il funzionamento del sistema operativo.

Dal 3 aprile 2006, la vendita dei prodotti familiari Driverrstudio è stata interrotta a causa dei "molti problemi tecnici e commerciali, nonché lo stato generale del mercato". Ultima versione Il sistema operativo, il cui supporto è stato implementato, è Windows XP Service Pack 2. Come regola, gli aggiornamenti dei servizi non modificano l'interfaccia dell'applicazione del sistema operativo, ma i numeri di chiamata di sistema e altre informazioni prive di documenti possono essere sottoposte a modifiche. Il debugger SOFFICE si basava sugli indirizzi rigidamente prescritti delle strutture dati interne. Di conseguenza - con il mantenimento della compatibilità di Service Pack 3 è stato rotto. Ovviamente, anche più versioni successive del sistema operativo Windows non sono supportate.

Syser Kernel Debugger creato da una piccola azienda cinese Sysersoft come sostituto di un debugger di Softice. Primo versione finale è stato rilasciato nel 2007. Come Softice, Syser Kernel Debugger è in grado di eseguire il debug interattivo sul sistema operativo. Supportato sono solo edizioni a 32 bit di versioni moderne di Windows.

Sul questo momento Debugger di Windows è lo strumento principale tra gli sviluppatori dei moduli del kernel. Utilizza anche il team di sviluppo del sistema operativo Windows.

Come lanciare il debugger del kernel?

La risposta del Master:

Nel processo di sviluppo del software, c'è un componente molto importante - questo è il debug. In direzione programmi applicati Viene eseguito mediante il lavoro in modalità utente e spesso incorporato in IDE. Per poter deviare, ad esempio, il conducente, il debugger del kernel deve essere lanciato.

È necessario eseguire il processore team cmd.. Aprire il menu Start sulla barra delle applicazioni. Nella finestra che appare, clicca su "Run ...". Viene visualizzata la finestra "Programma di avviamento". Nella casella di testo, inserisci CMD, quindi fare clic sul pulsante "OK".

Ora crea. backup. file boot.ini. Per prima cosa scopri il percorso di installazione della copia corrente delle finestre utilizzando il comando: echo% systemroot%

Successivamente, vai sul disco, con il sistema operativo installato inserendo gli elenchi dei dispositivi e dopo di loro, mettendo il colon. Usando il comando CD, vai alla directory principale. Ora usando il comando attrib, rimuovi gli attributi "nascosti", "sola lettura" e "sistema" dal file boot.ini. Copia comando Creare un backup e quindi impostare gli attributi nel luogo.

Per rimuovere l'elenco delle opzioni di download corrente, utilizzare il comando bootcfg / query. Visualizza l'elenco e definire tale voce sulla base della quale verranno create nuove impostazioni con la possibilità di debug nella modalità del kernel. L'identificatore di boot record dovrebbe essere ricordato.

Utilizzare il comando bootcfg / copia per creare un record di avvio. Per specificare l'identificatore di registrazione che copi, utilizzare il parametro / ID. Usando il parametro / D, impostare il nome di registrazione che verrà visualizzato. Ora è necessario tornare all'elenco delle opzioni di download utilizzando il comando bootcfg / query e guarda l'identificativo della voce aggiunta.

Ora è necessario abilitare le opzioni di avviare il debugger del kernel al record di avvio precedentemente creato. Se debug sulla macchina di destinazione, è solo necessario aggiungere l'opzione / debug.

Se si desidera implementare un debug remoto con la connessione del computer di destinazione tramite la porta COM sulla macchina host, quindi utilizzare le opzioni / porta e / baud per specificare il numero di porta e il tasso di cambio.

Se si sta debug in remoto attraverso il cavo FireWire (interfaccia IEEE 1394), quindi per abilitare la modalità appropriata, utilizzare l'opzione / dbg1394 e per specificare l'opzione numero del canale / ch.

Per assicurarsi che le modifiche vengano effettuate, controllare l'avvio utilizzando il comando bobcfg con il parametro / query. Mettendo il comando di uscita, chiudere la finestra del processore di comando.

Se necessario, modificare i parametri di avvio del sistema operativo. Aprire il pannello di controllo attraverso il menu Start e aprire l'elemento "Sistema" già in esso. Nella finestra "Proprietà sistema" che si apre, seleziona la scheda Avanzate. In questa scheda, selezionare una sezione con il nome "Download e Recovery" e fai clic sul pulsante "Parametri". Nella finestra "Carica e recupero" che appare, è necessario attivare l'opzione "Visualizza elenco di sistemi operativi". Chiudi entrambe le finestre di dialogo con il pulsante "OK".

Eseguire un computer per riavviare. Seleziona Caricamento con Debugger. Accedi al sistema e iniziare a lavorare sulla macchina di destinazione o avviare il debug remoto. Approfitta dei mezzi come Windbg e KD.

Debugger - il secondo dopo il compilatore è necessario creare programmi. Tuttavia, molti di quelli che scrivono programmi per computer e utilizzano il debugger, non sanno quali principi e meccanismi del suo lavoro.


È difficile essere il debugger ...

Alla luce del fatto che i programmatori usano la cena di debugger e Nosno, specialmente quando entrano nella modalità Debug Debug, vale la pena dire che se un debugger non è un programma, ma un pezzo di ferro, sarebbe sicuramente surriscaldato e si è rotto . Perché così tanto lavoro, quanto va via dal debugger, non ha nemmeno il compilatore.

Naturalmente, da quando ora molti di tutti i diversi linguaggi di programmazione, poi i debugger per ognuno di loro loro. E, naturalmente, per diverse categorie di queste lingue ci sono differenze nel lavoro dei debugger: ad esempio, il debugger dei programmi sul rubino interpretabile funzionerà diverso da quello compilato dal codice byte java Language., E il debugger per Java, a sua volta, avrà differenze dal debugger Visual C ++.

Parlerò di debug per la piattaforma Windows. Realando i principi del lavoro dei Debugger per lei, sarà possibile affrontare i debugger sotto il sistema Posix, e con Debugger che funzionano a livello del sistema operativo, ma a livello della macchina virtuale o di qualsiasi interprete .


Debugger per Windows: due tipi

Ci sono due tipi fondamentalmente diversi di debugger sotto Windows. Penso che tutto sia stato affrontato di tutto quando viene programmato su Delfi (non lo programmato su di esso? È difficile credere. Cosa hai programmato a scuola e nei corsi junior?). Questi sono le applicazioni personalizzate di debugger. Ne sono parecchi, ed esistono individualmente e (specialmente, a proposito, spesso) come parte degli ambienti integrati di sviluppo delle applicazioni. Tra i debugger distribuiti come prodotti software separati tradizionalmente allociamo Olicdbg, e una volta ho scritto a riguardo nel "Computer Westi".

Il secondo tipo di debugger è il core debugger del sistema operativo. Si incontrano e vengono utilizzati meno spesso e dal loro dispositivo differiscono in modo significativo dalle applicazioni utente di debugger. Il più famoso, e, allo stesso tempo, il miglior debugger di base è Softice. Forse non solo hai sentito parlare di lui, ma anche usato.

Dal momento che il lavoro di ciascuno dei due tipi di debugger ha le sue specifiche, allora ti parlerò di ognuno di loro.


Applicazioni utente di debugger

Il debugger delle applicazioni personalizzate è più semplice perché il lavoro nero e sporco assume il sistema operativo. Windows dispone di interfacce software speciali progettate per eseguire il debug delle applicazioni a livello utente - sono chiamate API di debug di Windows. Si sta debugando API che vengono utilizzate da tutti i debugger che sono incorporati in famosi ambienti di sviluppo integrati per Windows.

Per iniziare il debug, il debugger deve avviare il processo di debug in modo speciale, in modo che il sistema sappia che questo processo sarà in debug. Successivamente, il ciclo di debug inizia: il programma viene eseguito prima dell'inizio di un determinato evento, che viene chiamato - un evento di debug o evento di debug. In questo caso, il ciclo di debug è avviato in un flusso separato per prevenire l'attaccatura del debugger.

Ma questo è solo l'inizio. Perché la cosa più interessante nel lavoro del debugger inizia quando è successo l'evento di debug. Dopo tutto, infatti, qual è il lavoro del debugger? Per aiutare il programmatore di localizzare un errore con una precisione a una funzione specifica, un'operazione specifica, una variabile specifica. In questa custodia rigida, il debugger può anche aiutare il sistema operativo.

Quindi, è successo l'evento di debug, e quindi è necessario in qualche modo scoprire come è correlato al testo del programma. Questo è possibile solo se le informazioni speciali di debug sono abilitate nel programma stesso - la scheda dei caratteri di debug. Contiene informazioni sulla conformità tra indirizzi e caratteristiche delle funzionalità, tipi di dati, numero di righe di codice. È grazie a loro che è che debug da cui ogni programmatore di Windows è familiare. Le tabelle dei simboli hanno formati diversi, e quindi non è sempre possibile eseguire il debug di un programma compilato da un compilatore di un singolo sviluppatore utilizzando un debugger da un altro produttore. Ma, tuttavia, è possibile specificare il formato più comune: questo è PDB (Database del programma), ed è progettato, naturalmente, Microsoft Corporation.

Quindi, se il debug della tabella dei caratteri ha un formato PDB, è possibile utilizzare uno strumento speciale da Microsoft Corporation - un processore di debug simbolico. Una volta entrato nel cuore del sistema e si chiamava Imagehlp.dll, ma molto tempo fa è stato evidenziato in una biblioteca separata. Il processore di simbolo consente di trovare a un determinato indirizzo alla funzione Open più vicina oa una variabile globale, nonché il numero della stringa e il nome del file di testo sorgente, in cui questa linea si trova. Le operazioni inverse sono supportate, ad esempio, cercando l'indirizzo dell'indirizzo con il suo nome.

Questo, ovviamente, non è tutto il lavoro che il debugger è impegnato nelle applicazioni personalizzate. Ad esempio, quando il debug di applicazioni multi-threading, molti momenti molto sottili associati con l'interazione dei flussi appaiono. Anche quando il debugging di cose relativamente semplici, come i servizi, ci sono sfumature.

Ma sulle sfumature non ci fermeremo alla fine - alla fine dell'articolo, ti dirò dove leggere su di loro. Ora guardiamo al kernel debugger.


Debugger nucleare

Core Debugger - I programmi sono molto più complicati dei debugger delle applicazioni utente, e suppongo, è abbastanza chiaro perché: non hanno aiutante sotto forma di un sistema operativo. In questo caso, è il loro cliente, perché è lei, in definitiva, dovrebbe eseguire il debug.

La maggior parte dei debugger del kernel richiede due computer collegati al loro lavoro, collegati tramite cavo a modem zero. Zero-modem è un modo per collegare due computer direttamente tramite le porte COM o LTP. Il secondo computer è necessario, perché parte del debugger seduto sul primo (acceso da dove viene installato il sistema di debito), ha un accesso limitato all'hardware, e quindi l'intera potenza dei dati è nullo al secondo computer.

Nei moderni processori dell'architettura Intel X86, ci sono speciali registri di debug (e nel vecchio 368 °, e nei nuovi modelli di processori di loro solo otto, sono indicati come DR0-DR7). Questi registri consentono al debugger di impostare i checkpoint per la lettura e la registrazione della memoria, nonché sulle porte I / O. In generale, tutto sembra questo, e non penso che valga la pena di scrivere in dettaglio in dettaglio, per il quale ciascuno dei registri di debug è responsabile, che gli interrupt vengono implementati dal punto di interruzione e forniscono altre informazioni simili. È meglio raccontare le specifiche bookbug esistenti del kernel per Windows.

Bene, in primo luogo, questo è un debugger integrato nel kernel del sistema operativo. È in tutto il righello OS NT, a partire da Windows 2000. Fa parte del file ntoskrnl.exe e è possibile abilitarlo impostando l'opzione "/ debug" per il sistema operativo in boot.ini. Questo debugger ha bisogno di una connessione a modem zero e del secondo computer con lo stesso sistema operativo.

C'è un altro debugger del kernel da Microsoft - Windbg. Parlando rigorosamente, questo non è un debugger del kernel, ma un debugger ibrido che può essere utilizzato anche per eseguire il debug delle applicazioni del livello dell'utente. Lui, a differenza del debugger incorporato nel nucleo, ha un guscio grafico, e quindi è più facile usarlo. Questo debugger supporta anche estensioni speciali che possono essere utili durante la risoluzione di alcune attività di debug. Ma richiede anche due computer per eseguire il debug del kernel.

Tuttavia, c'è un debugger del kernel che può essere debug su un singolo computer. Questo è un softice. Allo stesso tempo, Softice può debug e programmi applicativi. L'utilizzo di questo debugger per i programmi utente è giustificata, ad esempio, in caso di debug dei sistemi in tempo reale legati a un timer di sistema. Se si risolve il debug utilizzando un debugger ordinario, il risultato potrebbe non essere corretto anche se il programma è operativo correttamente, e Softice interromperà il programma e il timer. Questo è utile quando si esegue il debug delle applicazioni multi-thread. A tutto il tempo, Softice ha mezzi molto, molto ben sviluppati per suscitare informazioni su tutti i flussi del sistema, sulla sincronizzazione dei flussi per applicazioni multi-thread, informazioni sull'impugnatura "Ah ... l'unico meno di questo debugger è la sua complessità per il programmatore dell'applicazione. Ma dai debugger principali è il più semplice ed efficace.


Per il più culo

Ora, ovviamente, una conversazione sul debugger per le applicazioni Windows non è pertinente come dieci anni fa. Il mondo intero è diventato interessato a Internet, e gli utenti principali di Softice divennero valle, lavoratori instancabili sulla pirateria Niva. Tuttavia, non è così brutto. Comunicazione con Softice "OM, indubbiamente, sviluppa una persona in termini di conoscenza del computer, anche se, ovviamente, se comunichi solo con il debugger e non comunica con persone viventi, alcuni effetti collaterali sono possibili. Bene, a proposito di Tutti stanno indovinando.

Debugger sono uno dei tipi più peculiari di software, ma in termini di sviluppo, anche i debugger di livello utente sono piuttosto complessi. Ma, tuttavia, se hai un desiderio e il tempo per sviluppare il tuo debugger, le tue conoscenze nel campo dei sistemi operativi e la programmazione aumenterà in modo significativo, e pertanto, le possibilità di funzionalità altamente retribuite aumenterà.

Quindi, se vuoi creare il tuo debugger, devi prima avere familiarità con i materiali su questo argomento. A mio parere, la migliore indennità per l'inizio sarà il libro di John Robbins "Debug di applicazioni di Windows". È già la vecchia edizione del 2001, ma le informazioni ne stabilite sono rilevanti e ora, poiché ha un comune, anche in qualche modo una natura fondamentale. In questo libro, ci sono esempi di debugger di scrittura per Windows, inoltre, ti sarà utile se si sta programmando su C ++ e vuoi capire meglio l'elaborazione delle eccezioni. In realtà, è stato da questo libro che ho saputo del debugger di cui all'articolo. Se trovi che questo libro non funzionerà (dopo tutto, è già piuttosto vecchio), ci sono diversi indirizzi che puoi rimanere utile. Il primo è questo: www.xakep.ru/post/19158/default.asp. Questo articolo della rivista "Hacker" racconta più dettagli sui debugger del kernel di quanto non lo fece, e inoltre contiene il codice del debugger più semplice. E a Kalashnikoff.ru/assembler/issues/016.htm, puoi imparare come scrivere un debugger DOS. Ma, naturalmente, è meglio leggere MSDN e trovare simultaneamente alcuni debugger con testi open source per affrontarlo. Bene, ovviamente, se sei venuto a scrivere un debugger, allora il successo per te in questa difficile questione!

La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.