Kompilator a debugger

0

Używam kompilatora gcc(mingw) do kompilacji programów napisanych w C++ oraz gdb jako debuggera.
Chciałbym zrozumieć jak dokładnie działa debugger. Czy każda binarka skompilowana z symbolami dla debuggera może
być zdebugowana przez gdb czy to zależy od kompilatora? Jeżeli mam plik wykonywalny z informacjami dla debuggera to każdy
debugger zrozumie te symbole ? Jest jakiś standard? Próbowałem wziąć binarkę z VS 2010 c++ w trybie debug i przetestować
gdb i on nie przeczytał tych symboli, z tego co wiem w VS opiera się to na plikach .pdb i pewnie debugowac można tylko w ich srodowisku.

1

jezeli masz symbole gdb to mozesz zdebugowac tylko debugerem ktory wygenerowal ten plik.

0
fasadin napisał(a):

jezeli masz symbole gdb to mozesz zdebugowac tylko debugerem ktory wygenerowal ten plik.

Czyli jak kompiluje w trybie do debugowania to już na tym etapie kompilacji debugger jest potrzebny? Wydawało mi się, że jak
kompiluję z symbolami dla debuggera to tym zajmuje się tylko kompilator i taką binarkę każdy debugger zdebuguje później.

1

Jeżeli kompilujesz w trybie debugowania np. gcc z symbloami dla gdb to gcc wie jakie symbole mają być dla gdb i je dodaje. Jeżeli kompilujesz w debugu w VS to kompilator VS wie co potrzebuje debugger i to dodaje. Debugger przy kompilacji jest niepotrzebny.

0

Da się np zmienić debugger dla gcc ? Żeby nie kompilował z symbolami dla gdb tylko dla innego, bo np chciałbym przetestować innny debugger.

1

Jeżeli mam plik wykonywalny z informacjami dla debuggera to każdy
debugger zrozumie te symbole ? Jest jakiś standard?

Nie ma standardu. GCC dokleja symbole na końcu pliku EXE, przez co plik staje się większy.
Visual C++ generuje osobny plik z rozszerzeniem PDB zawierającym symbole.
Te formaty nie są kompatybilne.

Microsoft wreszcie opublikował specyfikację PDB, więc może GDB kiedyś będzie rozumiał ten format.

0
Azarien napisał(a):

Jeżeli mam plik wykonywalny z informacjami dla debuggera to każdy
debugger zrozumie te symbole ? Jest jakiś standard?

Nie ma standardu. GCC dokleja symbole na końcu pliku EXE, przez co plik staje się większy.
Visual C++ generuje osobny plik z rozszerzeniem PDB zawierającym symbole.
Te formaty nie są kompatybilne.

Microsoft wreszcie opublikował specyfikację PDB, więc może GDB kiedyś będzie rozumiał ten format.

Nie ma standardu zdefiniowanego przez komisje standaryzacyjną C++. Gcc używa DWARF http://dwarfstd.org/ , który jest jak najbardziej standardem

1 użytkowników online, w tym zalogowanych: 0, gości: 1