ความแตกต่างระหว่าง gcc -ggdb และ gcc -g คืออะไร


91

เมื่อฉันใช้ gcc เพื่อรวบรวมโปรแกรม C ฉันมักจะใช้-gเพื่อรับข้อมูลการดีบักลงในไฟล์ elf เพื่อให้ gdb สามารถช่วยฉันได้หากจำเป็น

อย่างไรก็ตามฉันสังเกตเห็นว่าบางโปรแกรมใช้-ggdbเนื่องจากควรทำให้ข้อมูลดีบักเป็นมิตรกับ gdb มากขึ้น

แตกต่างกันอย่างไรและแนะนำให้ใช้แบบไหน?


หมายเหตุ:ลิงก์ไปยังตัวเลือกสำหรับการดีบักโปรแกรมของคุณหรือ GCC http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

คำตอบ:


39

เป็นไปได้ว่าไม่มีความแตกต่าง - ขึ้นอยู่กับรูปแบบดั้งเดิมของระบบปฏิบัติการและวิธีการพกพาที่คุณต้องการให้ข้อมูลการดีบักเป็น ดู GCC คู่มือตัวเลือกการแก้ไขข้อบกพร่อง


อาจพิจารณาเชื่อมโยงกระแสเช่นนี้หรือไม่
1737973

63

-gและ-ggdbมีความคล้ายคลึงกันโดยมีความแตกต่างเล็กน้อยฉันอ่านที่นี่ :

-g สร้างข้อมูลการดีบักในรูปแบบเนทีฟของOS¹ (สเต็ป, COFF, XCOFF หรือ DWARF 2)

-ggdb สร้างข้อมูลการดีบักที่มีไว้สำหรับ gdb โดยเฉพาะ

-ggdb3 สร้างข้อมูลการดีบักเพิ่มเติมตัวอย่างเช่น: รวมถึงข้อกำหนดมาโคร

-ggdbด้วยตัวมันเองโดยไม่ระบุค่าเริ่มต้นของระดับเป็น-ggdb2(เช่น gdb สำหรับระดับ 2)


12

ฉันมีอย่างน้อยหนึ่งตัวอย่างที่ -ggdb ทำงานได้ดีกว่าสำหรับฉันมากกว่าตัวเลือกการดีบักอื่นที่เราใช้:

หมายเหตุ: สิ่งนี้เกิดขึ้นเฉพาะในกล่อง x86-64 และจะหายไปเมื่อคอมไพล์ด้วย -ggdb แต่ดีบักเกอร์เวอร์ชันใหม่กว่าจะทำงานได้แม้กับ -gstabs +


7

สิ่งหนึ่งคือ "-g" เป็นแบบพกพา (เช่นใน Makefiles ถูกกำหนดให้ดำเนินการบนแพลตฟอร์มที่ไม่ใช่ GNU) ฉันมีปัญหาเกี่ยวกับการพกพาเกี่ยวกับ -g กับ -ggdb บนเครื่อง AIX เมื่อเร็ว ๆ นี้นั่นคือเหตุผลที่ฉันนำมัน

ไม่มีความคิดเกี่ยวกับสิ่งที่ -ggdb เพิ่มในการใช้งานแม้ว่า


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