Ответ 1
Попробуйте IDE, поддерживающие mingw. Например, открытый Code:: blocks.
Я выполняю кросс-компиляцию проекта из Linux для целевой Windows (используя mingw). Вывод DLL и p-invoking в него из С# работает, но отладка очень сложна. Сборка выводит файл .o, который может предоставлять символы gdb, но в основном все, что я могу сделать, - это прерывание исключений и поиск имени функции, которая выполнялась при возникновении исключения; даже полная трассировка стека. Я не могу отлаживать WinDbg, потому что у меня нет файлов .pdb.
Это проект с открытым исходным кодом, созданный для Linux; Я считаю, что их процесс сборки зависит от нескольких установленных пакетов Linux для работы.
Есть ли у меня какие-либо опции? Есть ли утилита, которая может конвертировать файлы .o в .pdb? Или какая-то программа, которая может дать мне больше информации, чем gdb при отладке?
Попробуйте IDE, поддерживающие mingw. Например, открытый Code:: blocks.
Другая возможность заключается в том, чтобы сделать это вручную: скомпилируйте его с помощью отладочных символов, запустите приложение и присоедините к нему отладчик GDB. Он также является частью дистрибутива MingW32. Затем вы можете установить свои точки останова и отладить ваше приложение
Но я думаю, что использование кода:: Block более удобно
Кстати, компилятор GCC не создает файлы pdb, потому что это проприетарный формат
Что означает xpol, возможно: если у вас есть полная установка mingw, тогда Code:: blocks могут использовать gdb для визуализации сеанса отладки, как это делается в Visual Studio или Eclipse. См. Главу "Отладчик" в http://www.codeblocks.org/features
Вы можете сгенерировать файл .pdb
с помощью cv2pdb.exe
из Visual D. Это работает даже для программ, не написанных в D, если они были скомпилированы с помощью mingw. После загрузки и установки Visual D cv2pdb.exe
можно найти в C:\Program Files (x86)\VisualD\cv2pdb\cv2pdb.exe
.
Вы можете запустить cv2pdb.exe
для исполняемого файла следующим образом:
cv2pdb.exe -n target.exe
Это приведет к созданию файла с именем target.pdb
. Предполагая, что target.pdb
и target.exe
находятся в текущем директоре, вы можете использовать windbg
следующим образом:
windbg -sflags 0x80030377 -y . -z target.dmp
В этом случае я также передаю файл minidump как target.dmp
. Это можно опустить. Опция -sflags 0x80030377
сообщает windbg
загружать target.pdb
, даже если она считает, что она не соответствует target.exe
.
Обратите внимание, что для загрузки target.pdb
может потребоваться очень много времени windbg
. Подождите, пока он больше не говорит *BUSY*
слева от поля ввода команды.
В качестве альтернативы вы можете попробовать DrMinGW.