Подтвердить что ты не робот

Отладка кросс-скомпилированного кода: Linux-> Windows

Я выполняю кросс-компиляцию проекта из Linux для целевой Windows (используя mingw). Вывод DLL и p-invoking в него из С# работает, но отладка очень сложна. Сборка выводит файл .o, который может предоставлять символы gdb, но в основном все, что я могу сделать, - это прерывание исключений и поиск имени функции, которая выполнялась при возникновении исключения; даже полная трассировка стека. Я не могу отлаживать WinDbg, потому что у меня нет файлов .pdb.

Это проект с открытым исходным кодом, созданный для Linux; Я считаю, что их процесс сборки зависит от нескольких установленных пакетов Linux для работы.

Есть ли у меня какие-либо опции? Есть ли утилита, которая может конвертировать файлы .o в .pdb? Или какая-то программа, которая может дать мне больше информации, чем gdb при отладке?

4b9b3361

Ответ 1

Попробуйте IDE, поддерживающие mingw. Например, открытый Code:: blocks.

Ответ 2

Другая возможность заключается в том, чтобы сделать это вручную: скомпилируйте его с помощью отладочных символов, запустите приложение и присоедините к нему отладчик GDB. Он также является частью дистрибутива MingW32. Затем вы можете установить свои точки останова и отладить ваше приложение

Но я думаю, что использование кода:: Block более удобно

Кстати, компилятор GCC не создает файлы pdb, потому что это проприетарный формат

Ответ 3

Что означает xpol, возможно: если у вас есть полная установка mingw, тогда Code:: blocks могут использовать gdb для визуализации сеанса отладки, как это делается в Visual Studio или Eclipse. См. Главу "Отладчик" в http://www.codeblocks.org/features

Ответ 4

Вы можете сгенерировать файл .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.