Domanda

Ho un eseguibile e lo sto debug usando GDB. Questa è la prima volta che uso GDB, quindi abbi pazienza per favore.

Voglio impostare un punto di interruzione in una funzione e conosco il nome della funzione usando il dump di classe. Ora non mi permette di aggiungere il punto di interruzione a quella funzione perché dice che non esiste una tabella dei simboli. Ho provato ad aggiungere la tabella dei simboli ma si lamenta ancora che nessuna tabella dei simboli caricata.

Quindi, c'è comunque che posso impostare un punto di interruzione su questo metodo? È un metodo C oggettivo, non C (se questo fa la differenza). Tutto quello che devo fare è esaminare l'argomento di questo metodo.

È stato utile?

Soluzione

In classe -dump c'è un'opzione -a che può stampare l'indirizzo della funzione, ad esempio

@interface FooObject : NSObject
{
}

- (void)y;  // IMP=0x100000d54

@end

Con questo puoi impostare un punto di interruzione usando l'indirizzo:

(gdb) b *0x100000d54
Breakpoint 1 at 0x100000d54

Nota che, a meno che tu non abbia spogliato l'eseguibile, dovresti sempre essere possibile impostare un punto di interruzione usando il nome del metodo

(gdb) b -[FooObject y]
Breakpoint 2 at 0x100000d60

(L'indirizzo non è lo stesso di quest'ultimo salta un codice di configurazione del frame.)

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