GDB: แบ่งถ้าตัวแปรเท่ากับค่า


91

ฉันต้องการให้ GDB กำหนดจุดพักเมื่อตัวแปรเท่ากับค่าที่ฉันตั้งไว้ฉันลองใช้ตัวอย่างนี้:

ผลลัพธ์จาก GDB:

อย่างที่คุณเห็น GDB ไม่ได้สร้างจุดแตกหักเป็นไปได้ด้วย GDB หรือไม่?

คำตอบ:


127

นอกจากจุดเฝ้าระวังที่ซ้อนอยู่ภายในเบรกพอยต์แล้วคุณยังสามารถตั้งค่าเบรกพอยต์เดียวใน "ชื่อไฟล์: line_number" และใช้เงื่อนไข ฉันพบว่าบางครั้งมันง่ายกว่า

ถ้าชอบฉันคุณเบื่อกับการเปลี่ยนหมายเลขบรรทัดคุณสามารถเพิ่มป้ายกำกับจากนั้นตั้งค่าเบรกพอยต์บนฉลากดังนี้:


30

คุณสามารถใช้ watchpoint สำหรับสิ่งนี้ (จุดพักบนข้อมูลแทนรหัส)

คุณสามารถเริ่มต้นโดยใช้watch i.
จากนั้นตั้งเงื่อนไขโดยใช้condition <breakpoint num> i == 5

คุณสามารถรับหมายเลขเบรกพอยต์ได้โดยใช้ info watch


3
(gdb) watch i No symbol "i" in current context.
SIFE

2
คุณต้องอยู่ในสถานที่ในรหัสที่iมีอยู่ ลองbreak main, run, c, s(ขั้นตอนเพื่อให้แน่ใจว่าคุณได้รับที่ผ่านมาการประกาศ) แล้วคำสั่งบนคำตอบ อย่าลืมคอมไพล์โปรแกรมของคุณด้วย-gแฟล็ก (เช่นมีข้อมูลการดีบัก)
imreal

ก่อนที่การดำเนินการจะเริ่มขึ้นหน่วยคอมไพล์ / ไฟล์อื่น ๆ ที่เชื่อมโยงกับไฟล์ปฏิบัติการหลักของคุณอาจยังไม่ถูกโหลด ตัวเลือกที่ดีคือการใช้งานแล้วstart <args>ซึ่งเป็นเหมือน,tb main run <args>การดำเนินการนี้จะเริ่มโปรแกรมช่วยให้คุณกำหนดจุดพัก / ชมได้ง่ายขึ้น
JWCS

9

ขั้นแรกคุณต้องคอมไพล์โค้ดของคุณด้วยแฟล็กที่เหมาะสมเปิดใช้งานการดีบักเป็นโค้ด

จากนั้นเรียกใช้โค้ดของคุณด้วยดีบักเกอร์ที่คุณชื่นชอบ

แสดงรหัส

แตกในบรรทัดที่ 5 และดูว่า i == 5

ตรวจสอบจุดพัก

รันโปรแกรม


4

มีจุดเฝ้าระวังฮาร์ดแวร์และซอฟต์แวร์ ใช้สำหรับอ่านและเขียนตัวแปร คุณต้องปรึกษาบทช่วยสอน:

http://www.unknownroad.com/rtfm/gdbtut/gdbwatch.html

ในการตั้งค่า watchpoint ก่อนอื่นคุณต้องทำลายรหัสลงในตำแหน่งที่ตัวแปร i ปรากฏอยู่ในสภาพแวดล้อมและตั้งค่า watchpoint

watchคำสั่งใช้เพื่อตั้งค่า watchpoit สำหรับการเขียนขณะrwatchอ่านและawatchสำหรับการอ่าน / เขียน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.