Как скомпилировать программу C в GCC, чтобы включить отладку в WinDbg?

Я компилирую такой код с помощью GCC (v7.1.0) (командная строка ниже).

int func()
{
    return 0x1234;
}

int main()
{
    func();
    return 0;
}

gcc .\001_simpleMain.c -O0 -m64 -g

После компиляции запускаю WinDbg (10.0), открываю исполняемый файл (Ctrl+E), программа загружается. Точка останова попадает в процесс запуска, все в порядке. После этого я хочу открыть исходный код (Ctrl+O) и попытаться поставить точку останова внутри метода func.

WinDlg говорит мне:

*** ОШИБКА: Загрузка модуля завершена, но не удалось загрузить символы для G:\Examples\Gcc\a.exe

Почему это не работает? Должен ли я изменить параметр компиляции? МОЙ процессор AMD64

Попробуйте использовать gdb (если доступно)   —  person Jacek    schedule 09.06.2017

Clang имеет режим совместимости с Microsoft, который передает отладочную информацию в стиле CodeView в объектные файлы. Если вы затем свяжете их с помощью Microsoft link.exe, у вас будут PDB, необходимые для WinDBG и других отладчиков Windows. Обратите внимание, однако, что режим совместимости Microsoft имеет и другие эффекты. clang.llvm.org/docs/MSVCCompatibility.html   —  person Jacek    schedule 09.06.2017

См. также:  как использовать команды cmd для двух разных учетных записей
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. Jacek

    Поскольку вы используете Windows с WinDbg, вам потребуются проприетарные файлы PDB, содержащие отладочную информацию. для инструментов отладчика, поставляемых Microsoft.

    GCC будет генерировать отладочную информацию, которую может использовать, например, отладчик gdb (хорошо известный в Linux).

    gcc -g:

    Создавайте отладочную информацию в собственном формате операционной системы (stabs, COFF, XCOFF или DWARF). GDB может работать с этой отладочной информацией.


    Если вы уже используете MinGW или Cygwin, вы можете использовать gdb оттуда, потому что он доступен в среде MinGW/Cygwin. Если нет, то доступно несколько gdb реализаций для Windows.

  2. Jacek

    После создания файлов отладки в соответствии с инструкциями @Andre Kampling сначала необходимо конвертировать их в формат PDB. Но даже в этом случае WinDbg, скорее всего, их не найдет.

    Исполняемый файл имеет некоторые данные, которые указывают на файл PDB. Поскольку вы создали Linux, это будет путь Linux, недоступный в вашей системе Windows.

    Поэтому вам нужно правильно настроить путь к символу, чтобы WinDbg знает, куда вы их положили.

    В основном вам понадобится

    0:000> .symfix c:\symbols
    

    для символов Microsoft и

    0:000> .sympath+ c:\path\to\your\symbols
    

    а затем указать WinDbg загрузить их снова

    0:000> .reload /f
    0:000> ld*
    

    То, что вы упомянули, в целом правильно, но это не решает вопрос, который был задан изначально. Как упоминалось ранее, gcc/g++ с параметром -g генерирует отладочные символы, понятные gdb, и, насколько мне известно, нет возможности отладить такую ​​программу с помощью Windbg в Windows. person Jacek; 13.10.2018

    @MaryamShabani: я добавил ссылку на конвертер person Jacek; 13.10.2018

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: