gdb: “Tidak ada tabel simbol yang dimuat”

90

Saya terus mendapatkan pesan kesalahan ini ketika mencoba menambahkan breakpoint di gdb.

Saya telah menggunakan perintah ini untuk mengkompilasi:

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

Saya juga mencoba "-ggdb" daripada "-g" dan saya masih mendapatkan pesan kesalahan itu.

Saya kemudian menjalankan gdb:

$gdb

Di gdb:

(gdb)exec-file main.o
(gdb)break 59
No symbol table is loaded. Use the "file" command.
pengguna994165
sumber
Oh maksudku main.o. Saya memperbaruinya. Saya juga mencoba menggunakan "-ggdb" dan masih ada masalah yang sama.
pengguna994165
Tunjukkan dengan tepat bagaimana Anda menggunakan gcc dan gdb. Salin-tempel untuk menghindari kesalahan.
Piotr Praszmo
1
Saya memperbarui perintah saya. Ini sangat aneh. Ini baru saja mulai bekerja. Saya tahu sebelumnya saya mengakses gdb menggunakan "gdb a.out" dan saya mendapatkan pesan kesalahan tentang a.out tidak ada atau sesuatu. Kemudian saya beralih ke "file-exec". Sekarang saya mencoba dengan a.out dan dikatakan "GDB ini telah dikonfigurasi sebagai" i486-linux-gnu "" dan breakpoint dapat diatur.
pengguna994165
oh ya, saya menentukan file yang salah a.out. Saya mengikuti tutorial gdb tanpa berpikir untuk mengubah nama file menjadi milik saya.
pengguna994165

Jawaban:

58

Pertama-tama, yang Anda miliki adalah program yang sepenuhnya dikompilasi, bukan file objek, jadi jatuhkan .oekstensinya. Sekarang, perhatikan apa yang dikatakan pesan kesalahan, itu memberitahu Anda dengan tepat bagaimana untuk memperbaiki masalah Anda: "Tidak ada tabel simbol yang dimuat. Gunakan perintah" file " ."

(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) 

Atau cukup teruskan program pada baris perintah.

$ 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) 
Kevin
sumber
Maaf saya seorang gdb noob. Solusi ini (dan tidak ada solusi lain untuk pertanyaan ini) yang berfungsi dengan gdb di WSL di Windows, apakah Anda punya saran untuk saya?
aderchox
141

Anda harus menambahkan parameter tambahan -g, yang menghasilkan informasi debug tingkat sumber. Ini akan terlihat seperti:

gcc -g prog.c

Setelah itu Anda dapat menggunakan gdb dengan cara yang umum.

kralex
sumber
27
Dalam kasus saya, jawaban ini memecahkan masalah bagi saya, sedangkan jawaban yang diterima tidak membuat perbedaan.
Frankster
8

Saya memiliki masalah yang sama dan saya mengikuti Posting ini , itu menyelesaikan masalah saya.

Ikuti 2 langkah berikut:

  1. Pastikan tingkat pengoptimalannya -O0
  2. Tambahkan -ggdbbendera saat menyusun program Anda

Semoga berhasil!

Charles Chow
sumber
0

Setiap kali gccmesin kompilasi dan mesin gdb uji memiliki versi yang berbeda , Anda mungkin menghadapi ketidakcocokan format debuginfo .

Untuk memperbaikinya, coba turunkan format debuginfo:

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

Atau cocokkan gdbdengan yang gccAnda gunakan.

ulidtko
sumber
0

Saya menemui masalah ini pagi ini karena saya menggunakan executable yang sama di OS gcc -ggdb -Wall test.c -o testYANG BERBEDA: setelah menyusun program saya dengan di Mac saya (10.15.2), saya menjalankan gdbdengan executable di Ubuntu (16.04) di VirtualBox saya.

Perbaiki: kompilasi ulang dengan perintah yang sama di bawah Ubuntu, maka Anda akan baik-baik saja.

Wenhe Qi
sumber