Отладка exe с использованием GDB
После нескольких неудачных попыток отладки exe-файла решил попробовать gdb для отладки исполняемого файла в среде Windows.
Параметры, которые используются для компиляции exe, выглядят так
/nologo /Z7 /Zi /MT /W3 /GX /O2 /D /DEBUG
Это параметры, которые я использую для загрузки исполняемого файла в GDB
target exec setup
run -debug ( this is the option against which I would like to perform some debugging)
Мне нужен способ загрузки источника / символов в GDB, так как в противном случае я не могу установить допустимые точки останова.
Это то, что я пытался установить точки останова (кроме обычного способа)
(gdb) set breakpoint pending on
(gdb) break runInstaller.c:6318
No symbol table is loaded. Use the "file" command.
Breakpoint 2 (runInstaller.c:6318) pending.
(gdb) pwd
Working directory C:\
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y <PENDING> WinMain
2 breakpoint keep y <PENDING> runInstaller.c:6318
Я пытался это загрузить исполняемый файл;
(gdb) file setup
Reading symbols from setup...(no debugging symbols found)...done.
Именно из-за вышеуказанных ошибок я понимаю, что исполняемый файл не скомпилирован с параметрами отладки, поэтому в gdb есть эквивалент gcc -g или есть лучший способ загрузки символов / исходного кода в gdb.
Изменить 1: всякий раз, когда я пытаюсь добавить точку останова, я вижу следующую ошибку:
(gdb) b main_helper
Function "main_helper" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 5 (main_helper) pending.
1 ответ
Установочный файл, который вы используете в данный момент, не имеет таблицы символов, необходимой для отладки. Когда вы генерируете исполняемый двоичный файл, вам также необходимо сгенерировать таблицу символов. Ex. когда мы генерируем исполняемый файл для программы ac, мы компилируем аргумент -g.
gcc setup.c -o setup -g
-g
говорит компилятору gcc сгенерировать таблицу символов.