Qualcuno può spiegare questo comportamento di gdb?Perché GDB salta in modo imprevedibile tra le righe e stampa le variabili come "<valore ottimizzato>"?
900 memset(&new_ckpt_info,'\0',sizeof(CKPT_INFO));
(gdb)
**903 prev_offset = cp_node->offset;**
(gdb)
**905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset);
(gdb)
**903 prev_offset = cp_node->offset;**
(gdb)
**905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);**
(gdb)
**908 bitmap_offset = client_hdl/32;**
(gdb)
**910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);**
(gdb)
**908 bitmap_offset = client_hdl/32;**
(gdb)
**910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);**
(gdb)
**908 bitmap_offset = client_hdl/32;**
(gdb)
**910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);**
(gdb)
913 found = cpnd_find_exact_ckptinfo(cb , &ckpt_info , bitmap_offset , &offset , &prev_offset);
(gdb)
916 if(!found)
(gdb) p found
$1 = <value optimized out>
(gdb) set found=0
Left operand of assignment is not an lvalue.
Perché dopo l'esecuzione linea 903 si esegue di nuovo lo stesso per 905 908 910?
Un'altra cosa è found
è una variabile di tipo bool
, quindi perché sta mostrando value optimized out
? Non riesco a impostare il valore di found
.
Questo sembra essere un'ottimizzazione del compilatore (in questo caso il suo -O2
); come posso ancora impostare il valore di found
?
quando il debug, è generalmente una buona idea di compilare con -O0 come ottimizzare porta a questo tipo di problemi. – LiraNuna