ใครช่วยอธิบายพฤติกรรมของ gdb นี้ได้บ้าง?
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.
ทำไมหลังจากเรียกใช้บรรทัด 903 อีกครั้งจึงดำเนินการเหมือนกันสำหรับ 905908 910
สิ่งหนึ่งคือfound
เป็นbool
ตัวแปรชนิดดังนั้นทำไมมันมีการแสดงvalue optimized out
? ฉันไม่สามารถตั้งค่าของfound
เช่นกัน
นี่ดูเหมือนจะเป็นการเพิ่มประสิทธิภาพคอมไพเลอร์ (ในกรณีนี้คือ-O2
); ฉันจะยังคงตั้งค่าของfound
?