Domanda

Un collega ha un programma C che fallisce in modo prevedibile a causa della memoria danneggiata. Vorrebbe utilizzare dbx per monitorare la posizione della memoria una volta allocata per individuare il codice che causa la corruzione.

È possibile? In tal caso, qual è la sintassi per produrre un breakpoint al momento della corruzione?

In caso contrario, quale sarebbe un buon approccio per risolvere questo tipo di problema?

(La mia solita tattica è guardare il controllo del codice sorgente per vedere cosa sono cambiato di recente, dato che di solito è la causa. Ma il codice in questione sembra funzionare solo per fortuna, quindi non lo farà Inoltre, mi sono già eliminato come colpevole non avendo mai lavorato con il codice. ;-)

È stato utile?

Soluzione

Dando uno sguardo più approfondito, sembra che la soluzione nelle ultime versioni di dbx sia qualcosa del tipo:

stop access w <address>, <size>

Dato che <address> e <size> possono essere espressioni, puoi scrivere comandi come:

stop access w &p, sizeof(int)

Ciò presuppone che p sia un puntatore e vogliamo monitorare la prima parola a cui punta.

Ho anche incontrato un ottimo tutorial sul tracciamento e stomping bug di memoria. Utilizza gdb anziché <=>, ma i principi dovrebbero essere gli stessi.

Altri suggerimenti

Su AIX, vuoi usare stophwp:

(dbx) help stophwp

stophwp <address> <size>

        Stop execution when the contents of the specified
        memory region change.  This is a accomplished in
        hardware and may not be available on all models.

Non sono uno sviluppatore di Solaris, ma puoi farlo con gdb e breakpoint hardware

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top