2016-05-20 3 views
0

после попытки пары альтернатив для отладки exe довольно неудачно решил попробовать gdb для отладки исполняемого файла на окнах env.отладка exe с помощью gdb

В, которые используются, чтобы скомпилировать ехе выглядеть следующим образом

/nologo /Z7 /Zi /MT /W3 /GX /O2 /D /DEBUG 

Эти опции параметры, которые я использую, чтобы загрузить исполняемый файл в БГД

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. 

Это происходит из-за вышеуказанных ошибок, я понимаю, что исполняемый файл не компилируется с параметрами отладки, так что там НКУ -g эквивалент в БГД или есть лучший способ загрузки с символами/исходный код в gdb.

Edit 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

Эти варианты, которые вы упомянули, предназначены для cl, а не gcc? Если да, то почему вы не используете windbg или отладчик внутри Visual Studio? Они могли бы лучше справиться с отладкой двоичного файла Windows – stijn

+0

@stijn да варианты, которые я упомянул, для CL, а не для gcc, я пробовал с windbg (понял, что в командном окне отображаются инструкции уровня сборки, которые я не понять, и поскольку частные символы не были загружены, мне не удалось установить точки останова там, где они увядают). Уровень комфорта немного выше с помощью gdb. К сожалению, у нас есть exe, который также должен поддерживаться – bhavs

+0

Поскольку у вас есть cl, у вас, вероятно, есть VS (если вы не использовали один из этих совершенно новых «просто инструментов C++ toolset»)? Я уверен, что уровень комфорта его отладчика похож на gdb's, за исключением того, что все это в gui, а не в командной строке. – stijn

ответ

0

Установочный файл, который вы используете, не имеет таблицу символов, которая требуется для отладки. Когда вы создаете исполняемый двоичный файл, вам нужно также сгенерировать таблицу символов. Пример. когда мы создаем исполняемый файл для c-программы, которую мы скомпилируем с аргументом -g.

gcc setup.c -o setup -g 

-g сообщает GCC компилятор для создания таблицы символов.

+0

Да, я это знаю, но поскольку я использую компилятор Windows, я не уверен, что эквивалентные опции для gcc -g в Windows. – bhavs

+0

какой компилятор вы используете? –

+0

Я использую компилятор intel – bhavs

Смежные вопросы