gdb:“ ไม่มีการโหลดตารางสัญลักษณ์”


93

ฉันได้รับข้อความแสดงข้อผิดพลาดนี้เรื่อย ๆ เมื่อพยายามเพิ่มเบรกพอยต์ใน gdb

ฉันใช้คำสั่งเหล่านี้เพื่อรวบรวม:

ฉันลองใช้ "-ggdb" แทน "-g" ด้วยและฉันก็ยังคงได้รับข้อความแสดงข้อผิดพลาดนั้น

จากนั้นฉันรัน gdb:

ใน gdb:


โอ้ฉันหมายถึง main.o. ฉันอัปเดตแล้ว ฉันลองใช้ "-ggdb" แล้วและยังคงให้ปัญหาเดิมอยู่
user994165

แสดงให้เราเห็นว่าคุณเรียกใช้ gcc และ gdb อย่างไร คัดลอกวางเพื่อหลีกเลี่ยงความผิดพลาดใด ๆ
Piotr Praszmo

1
ฉันอัปเดตคำสั่งของฉัน นี่เป็นเรื่องแปลกจริงๆ มันเพิ่งเริ่มทำงาน ฉันรู้ว่าก่อนหน้านี้ฉันเข้าถึง gdb โดยใช้ "gdb a.out" และฉันได้รับข้อความแสดงข้อผิดพลาดเกี่ยวกับ a.out ไม่มีอยู่หรือบางอย่าง จากนั้นฉันก็เปลี่ยนไปใช้ "exec-file" ตอนนี้ฉันลองใช้ a.out แล้วมันขึ้นว่า "GDB นี้ถูกกำหนดค่าเป็น" i486-linux-gnu "" และสามารถตั้งค่าจุดพักได้
user994165

โอ้ฉันระบุไฟล์ a.out ผิด ฉันทำตามบทช่วยสอน gdb โดยไม่คิดที่จะเปลี่ยนชื่อไฟล์เป็นของฉันเอง
user994165

คำตอบ:


61

ก่อนอื่นสิ่งที่คุณมีคือโปรแกรมที่คอมไพล์อย่างสมบูรณ์ไม่ใช่ไฟล์ออบเจ็กต์ดังนั้นให้วางไฟล์ .oส่วนขยาย ตอนนี้ให้ความสนใจกับสิ่งที่เกิดข้อผิดพลาดกล่าวว่ามันจะบอกคุณว่าวิธีการแก้ไขปัญหาของคุณ: "ไม่มีตารางสัญลักษณ์ถูกโหลด. ใช้ 'แฟ้มคำสั่ง' ."

หรือเพียงแค่ส่งโปรแกรมบนบรรทัดคำสั่ง


ขออภัยฉันเป็น gdb noob โซลูชันนี้ (และไม่มีวิธีแก้ปัญหาอื่นใดในคำถามนี้) ใช้ได้กับ gdb บน WSL บน Windows คุณมีข้อเสนอแนะสำหรับฉันหรือไม่?
aderchox

142

คุณต้องเพิ่มพารามิเตอร์พิเศษ -g ซึ่งสร้างข้อมูลการดีบักระดับซอร์ส จะมีลักษณะดังนี้:

หลังจากนั้นคุณสามารถใช้ gdb ได้ทั่วไป


27
ในกรณีของฉันคำตอบนี้ช่วยแก้ปัญหาให้ฉันได้ในขณะที่คำตอบที่ยอมรับไม่ได้สร้างความแตกต่าง
frankster

8

ฉันมีปัญหาเดียวกันและฉันติดตามโพสต์นี้มันช่วยแก้ปัญหาของฉันได้

ทำตาม 2 ขั้นตอนต่อไปนี้:

  1. ตรวจสอบให้แน่ใจว่าระดับการเพิ่มประสิทธิภาพอยู่ที่ -O0
  2. เพิ่ม-ggdbแฟล็กเมื่อคอมไพล์โปรแกรมของคุณ

โชคดี!


0

เมื่อใดก็ตามgccบนเครื่องคอมไพล์และgdb บนเครื่องทดสอบมีเวอร์ชันที่แตกต่างกันคุณอาจเผชิญกับความไม่ลงรอยกันของรูปแบบ debuginfoรูปแบบเข้ากันไม่ได้

ในการแก้ไขให้ลองดาวน์เกรดรูปแบบ debuginfo:

หรือตรงgdbกับที่gccคุณใช้


0

ฉันพบปัญหานี้เมื่อเช้านี้เพราะฉันใช้ปฏิบัติการเดียวกันในระบบปฏิบัติการที่แตกต่างกัน: หลังจากรวบรวมโปรแกรมของฉันด้วยgcc -ggdb -Wall test.c -o testใน Mac (10.15.2) ฉันรันgdbด้วยไฟล์ปฏิบัติการใน Ubuntu (16.04) ใน VirtualBox ของฉัน

แก้ไข: คอมไพล์ใหม่ด้วยคำสั่งเดียวกันภายใต้ Ubuntu จากนั้นคุณควรจะดี

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