การใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การใช้ gdb และ lldb
- AddressSanitizer
- UBSan และ TSan
- พื้นฐาน Valgrind