More Breaks
นอกจาก break โง่ๆที่แสดงให้ดูก่อนหน้าแล้ว ยังมี break อีกหลายแบบที่ช่วยให้เราสามารถ debug ด้วย GDB อย่างมีความสุขมากขึ้นได้ (สำหรับคนที่ชื่นชอบการ break โง่ๆก็ข้ามได้ครับ)
Break with condition
เราสามารถเพิ่ม condition ขณะ break ได้ โดยใช้คำสั่ง cond ด้วย cond <breakpoint_no> <condition>เช่น
(gdb) b 11
Breakpoint 1 at 0x890: file example.c, line 11.
(gdb) cond 1 (i==5)
(gdb) r
Starting program: /home/bankde/Desktop/tmp/example.o
Put string to split: hello world
Breakpoint 1, split (input=0x7fffffffdf40 "hello world\n") at example.c:11
11 if (input[i] == ' ') {
(gdb) p i
$1 = 5เราก็จะสามารถหยุดเฉพาะกรณี i==5 ได้ ไม่เสียเวลามานั่งเลือกครับ
Break when Variables change
ให้หยุดเมื่อตัวแปรที่เราระบุไว้มีการเปลี่ยนแปลง ใช้คำสั่ง watch ครับ ข้อเสียคือ ตัวแปรนั้นต้องถูกประกาศ หรือ memory ที่จะ watch ต้องถูก allocate ก่อน
นอกจากนี้ยังมี rwatch สำหรับหยุดเมื่อพบการ read และ awatch สำหรับทั้งการ read/write ด้วย
watch ที่ memory location ก็ได้ครับ อันนี้เครื่องผมไม่ support masking ของ watch เลยต้อง manual watch เอง เนื่องจากมันไม่เข้าใจว่าที่ watch อยู่เป็น string old/new value เลยดูประหลาดๆ ก็เลยต้อง print bytes ออกมาให้ดูครับ
Break on Catch Event
ใช้ catch สำหรับดักพวก Exception และ loading shared library ต่างๆ ผมไม่ได้เขียน c++ เลยใช้ส่วนนี้ไม่เป็นครับ ตอนนี้ใส่ไว้ให้ผู้อ่านรู้ว่ามันก็มีนะ ส่วนใครทำเป็น มาเปิด PR เติมได้
Last updated
Was this helpful?