0Pricing
C++ Academy · บทเรียน

การใช้ gdb และ lldb

ก้าวผ่านโปรแกรมทีละขั้น

การใช้ gdb และ lldb เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

เครื่องมือแก้จุดบกพร่องแบบโต้ตอบ

จีดีบี (GNU) และ แอลแอลดีบี (LLVM) ช่วยให้คุณหยุดโปรแกรมที่กำลังทำงาน ตรวจสอบตัวแปร และไล่ดูโค้ดทีละบรรทัด คำสั่งของเครื่องมือทั้งสองคล้ายกัน

คอมไพล์พร้อมข้อมูลการแก้จุดบกพร่อง

ควรสร้างโปรแกรมด้วย -g เสมอ (และควรใช้ -O0 ด้วย) เพื่อให้เครื่องมือแก้จุดบกพร่องจับคู่โค้ดเครื่องกลับไปยังซอร์สโค้ดของคุณได้

g++ -g -O0 main.cpp -o app
# then
gdb ./app

การตั้งจุดหยุด

จุดหยุดจะหยุดการทำงาน ณ ตำแหน่งที่เลือก

  • จีดีบี: break main.cpp:10 หรือ break myFunc
  • แอลแอลดีบี: breakpoint set --file main.cpp --line 10 หรือ b myFunc

การเรียกใช้โปรแกรม

เริ่มการทำงานด้วย run (หรือ r) โปรแกรมจะหยุดที่จุดหยุดแรกที่พบ และพร้อมให้ตรวจสอบ

การไล่ดูโค้ดทีละขั้น

คำสั่งหลักสำหรับการไล่ทีละขั้น (ใช้ชื่อเดียวกันในจีดีบีและแอลแอลดีบี):

  • next / n: เรียกใช้ทีละบรรทัด โดยข้ามการไล่เข้าไปในคำเรียก
  • step / s: ไล่เข้าไปในคำเรียก
  • finish: เรียกใช้ต่อจนฟังก์ชันปัจจุบันส่งคืนค่า
  • continue / c: ทำงานต่อจนถึงจุดหยุดถัดไป

การตรวจสอบตัวแปร

พิมพ์ค่าเพื่อทำความเข้าใจสถานะของโปรแกรม

  • จีดีบี: print x, print arr[2]
  • แอลแอลดีบี: frame variable หรือ p x

เป้าหมายสำหรับเซสชันตัวอย่าง

ลองพิจารณาโปรแกรมนี้ คุณอาจตั้งจุดหยุดที่ลูปและพิมพ์ค่า sum ในแต่ละรอบ

#include <iostream>

int main() {
    int sum = 0;
    for (int i = 1; i <= 3; ++i) {
        sum += i;
    }
    std::cout << sum << "\n";
    return 0;
}

สแตกการเรียก

เมื่อโปรแกรมหยุด backtrace (จีดีบี) หรือ bt (แอลแอลดีบี) จะแสดงลำดับของการเรียกฟังก์ชัน ใช้ frame N เพื่อสลับไปยังฟังก์ชันผู้เรียกและตรวจสอบตัวแปรภายในของฟังก์ชันนั้น

จุดเฝ้าดู

จุดเฝ้าดูจะหยุดโปรแกรมเมื่อตัวแปรเปลี่ยนค่า ซึ่งช่วยค้นหาตำแหน่งที่เกิดการแก้ไขที่ไม่คาดคิด

  • จีดีบี: watch counter
  • แอลแอลดีบี: watchpoint set variable counter

จุดหยุดแบบมีเงื่อนไข

หยุดเฉพาะเมื่อเงื่อนไขเป็นจริง เพื่อหลีกเลี่ยงการไล่ทีละขั้นด้วยตนเอง

  • จีดีบี: break loop.cpp:5 if i == 99
  • แอลแอลดีบี: breakpoint set --line 5 --condition "i == 99"

การแก้จุดบกพร่องเมื่อโปรแกรมขัดข้อง

เรียกใช้โปรแกรมที่ขัดข้องภายใต้เครื่องมือแก้จุดบกพร่อง เมื่อเกิดข้อผิดพลาดในการเข้าถึงหน่วยความจำ โปรแกรมจะหยุดที่บรรทัดที่เกิดข้อผิดพลาด จากนั้นใช้ bt เพื่อดูเส้นทางที่นำมาถึงจุดนั้น นอกจากนี้คุณยังวิเคราะห์ไฟล์ดัมพ์หน่วยความจำหลักภายหลังได้

ตรวจสอบอย่างรวดเร็ว

ทบทวนคำสั่งสำหรับการไล่ทีละขั้น

สรุปทบทวน

คุณได้เรียนรู้การแก้จุดบกพร่องแบบโต้ตอบ

  • สร้างโปรแกรมด้วย -g -O0
  • ตั้งจุดหยุด ใช้ run แล้วใช้ next/step/finish
  • ตรวจสอบด้วย print/frame variable และ backtrace
  • จุดเฝ้าดูและจุดหยุดแบบมีเงื่อนไขช่วยเจาะจงไปยังข้อบกพร่องที่ซับซ้อน

คำถามที่พบบ่อย

บทเรียน “การใช้ gdb และ lldb” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การใช้ gdb และ lldb” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การใช้ gdb และ lldb”

ก้าวผ่านโปรแกรมทีละขั้น คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การใช้ gdb และ lldb” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การใช้ gdb และ lldb
  2. AddressSanitizer
  3. UBSan และ TSan
  4. พื้นฐาน Valgrind
← กลับไปที่ C++ Academy