Debugger per lo sviluppo I / O di file? [chiuso]

0

Ok, il titolo della domanda potrebbe essere un po 'criptico. Ma descrive in modo appropriato quello che sto cercando:

Penso che ogni coder esperto abbia attraversato questo numero di volte: si ottiene una specifica di formato di file binario, si implementa il lettore per esso e ... niente funziona come previsto. Quindi esegui il codice nel debugger, vai a eseguire il codice riga per riga, ogni campo di intestazione viene letto in modo apparentemente corretto, ma quando si tratta di dati di massa, offset e indici non corrispondono più.

Ciò che potrebbe davvero aiutare in questa situazione era un visualizzatore di file binario, che mostra l'avanzamento del puntatore del file, mentre si passa attraverso il codice, e idealmente si evidenzia anche tutte le mappe di memoria. Quindi è possibile vedere il contesto delle attuali operazioni di I / O, in particolare quelle che commettono errori "off-by-one", che sono ancora più fastidiosi durante la lettura di un file.

L'implementazione di un debugger di questo tipo non dovrebbe essere troppo difficile. tracce sul descrittore di file / handle e trigger dei processi sulle funzioni I / O, per aggiornare il display.

Solo: non conosco un tipo di debugger per esistere. Mi manca solo la conoscenza dell'esistenza di un tale strumento, o non c'è davvero niente del genere?

    
posta datenwolf 04.07.2012 - 02:03
fonte

2 risposte

2

Suggerimento n. 1: strumenti della GUI:

Process Monitor è esattamente un tale strumento disponibile gratuitamente su Microsoft Windows x86 e x64. link

Suggerimento n. 2: crea i tuoi strumenti:

Un formato di file complesso può spesso essere pensato come una struttura ad albero profondamente annidata di "contenitori". I dati effettivi sul file possono essere collegati con puntatori offset, ma ciò non impedisce di costruire una vista concettuale e gerarchica della struttura del file.

Qual è il modo più semplice per visualizzare una tale struttura? XML.

Suggerimento n. 3: implementa il tuo decoder in un'interfaccia debugger-friendly

Dai un'occhiata all'interfaccia IStream (COM e prendi in considerazione il refactoring del tuo codice per lavorare con queste operazioni di file elementari:

  • Seek
  • Leggi
  • Scrivi
  • SetSize

Insieme a un sacco di classi Decorator (che implementano l'interfaccia IStream), puoi implementare i lettori per formati di file molto sofisticati.

Ad esempio, i codificatori di immagini e i decodificatori di Windows Imaging Component sono implementati con tale architettura.

Questo approccio non porta a grandi prestazioni di I / O; ma se non riesci a ottenere un'implementazione corretta, concentrarti sulle prestazioni sarà inutile.

    
risposta data 04.07.2012 - 02:34
fonte
0

Poiché ogni formato di file binario (proprio come i file di testo) è diverso, non può esserci un singolo strumento che lo faccia per tutti. Se non ne scrivi uno tu stesso, o lo sceneggiatore delle specifiche ne ha uno per te, sarai sfortunato. Un editor decente che supporta la visione binaria dei file è obbligatorio, come un'abilità e la volontà di fare matematica esadecimale.

I file binari non sono difficili, l'unica differenza con un file di testo è che i programmatori ogni dove sembrano tremare nei loro stivali quando sentono il termine.

La mia esperienza (proveniente da sistemi embedded) è che la maggior parte delle persone ha problemi a causa di ipotesi errate - cose come un byte è 8 bit e una parola è 32. Un approccio metodico e nessuna ipotesi sono il modo migliore per affrontare i tuoi problemi.

    
risposta data 04.07.2012 - 02:11
fonte

Leggi altre domande sui tag