gdb: "Không có bảng biểu tượng nào được tải"


90

Tôi tiếp tục nhận được thông báo lỗi này khi cố gắng thêm một điểm ngắt trong gdb.

Tôi đã sử dụng các lệnh này để biên dịch:

gcc -g main.c utmpib2.c -o main.o
and:
cc -g main.c utmpib2.c -o main.o
and also:
g++ -g main.c utmpib2.c -o main.o

Tôi cũng đã thử "-ggdb" thay vì "-g" và tôi vẫn nhận được thông báo lỗi đó.

Sau đó tôi thực thi gdb:

$gdb

Trong gdb:

(gdb)exec-file main.o
(gdb)break 59
No symbol table is loaded. Use the "file" command.

Ồ, ý tôi là main.o. Tôi đã cập nhật nó. Tôi cũng đã thử sử dụng "-ggdb" và nó vẫn gây ra cho tôi vấn đề tương tự.
user994165

Cho chúng tôi thấy chính xác cách bạn đang gọi gcc và gdb. Sao chép-dán để tránh bất kỳ lỗi nào.
Piotr Praszmo

1
Tôi đã cập nhật các lệnh của mình. Điều này thật kỳ quái. Nó chỉ mới bắt đầu hoạt động. Tôi biết trước đây tôi đang truy cập gdb bằng "gdb a.out" và tôi nhận được thông báo lỗi về a.out không tồn tại hoặc một cái gì đó. Sau đó, tôi chuyển sang "tệp thực thi". Bây giờ tôi đã thử với a.out và nó cho biết "GDB này đã được định cấu hình là" i486-linux-gnu "" và có thể đặt các điểm ngắt.
user994165

ồ duh Tôi đã chỉ định sai tệp a.out. Tôi đã làm theo hướng dẫn gdb mà không cần suy nghĩ để thay đổi tên tệp thành của riêng mình.
user994165

Câu trả lời:


58

Trước hết, những gì bạn có là một chương trình được biên dịch đầy đủ, không phải là một tệp đối tượng, vì vậy hãy bỏ .ophần mở rộng. Bây giờ, hãy chú ý đến nội dung thông báo lỗi, nó cho bạn biết chính xác cách khắc phục sự cố của bạn: "Không có bảng biểu tượng nào được tải. Sử dụng lệnh" tệp " ."

(gdb) exec-file test
(gdb) b 2
No symbol table is loaded.  Use the "file" command.
(gdb) file test
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 

Hoặc chỉ cần truyền chương trình trên dòng lệnh.

$ gdb test
GNU gdb (GDB) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[...]
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 

Xin lỗi, tôi là một gdb noob. Giải pháp này (và không có giải pháp nào khác cho câu hỏi này) hoạt động với gdb trên WSL trên Windows, bạn có đề xuất nào cho tôi không?
aderchox

141

Bạn phải thêm tham số bổ sung -g, tạo thông tin gỡ lỗi cấp nguồn. Nó sẽ giống như sau:

gcc -g prog.c

Sau đó, bạn có thể sử dụng gdb theo cách phổ biến.


27
Trong trường hợp của tôi, câu trả lời này đã giải quyết được vấn đề cho tôi, trong khi câu trả lời được chấp nhận không có gì khác biệt.
Frankster

8

Tôi có cùng một vấn đề và tôi đã theo dõi Bài đăng này , nó đã giải quyết được vấn đề của tôi.

Làm theo 2 bước sau:

  1. Đảm bảo mức tối ưu hóa là -O0
  2. Thêm -ggdbcờ khi biên dịch chương trình của bạn

Chúc may mắn!


0

Bất cứ khi nào gcctrên máy biên dịch và máy gdb kiểm tra có các phiên bản khác nhau , bạn có thể gặp phải tình trạng không tương thích với định dạng debuginfo .

Để khắc phục điều đó, hãy thử hạ cấp định dạng debuginfo:

gcc -gdwarf-3 ...
gcc -gdwarf-2 ...
gcc -gstabs ...
gcc -gstabs+ ...
gcc -gcoff ...
gcc -gxcoff ...
gcc -gxcoff+ ...

Hoặc phù hợp gdbvới gccbạn đang sử dụng.


0

Tôi đã gặp sự cố này sáng nay vì tôi đã sử dụng cùng một tệp thực thi trong các hệ điều hành KHÁC NHAU: sau khi biên dịch chương trình của tôi với gcc -ggdb -Wall test.c -o testtrong máy Mac (10.15.2), tôi đã chạy gdbvới tệp thực thi trong Ubuntu (16.04) trong VirtualBox của mình.

Khắc phục: biên dịch lại với cùng một lệnh trong Ubuntu, sau đó bạn sẽ tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.