Отладка кросс-скомпилированного кода: Linux-> Windows - PullRequest
12 голосов
/ 31 мая 2011

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

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

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

Ответы [ 4 ]

1 голос
/ 31 января 2013

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

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

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

1 голос
/ 03 июня 2011

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

0 голосов
/ 08 июня 2016

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

В этом случае я также передаю файл минидампа как target.dmp.Это может быть опущено.Опция -sflags 0x80030377 указывает windbg загрузить target.pdb, даже если он считает, что он не соответствует target.exe.

Обратите внимание, что windbg может потребоваться очень много времени для загрузки target.pdb.Просто подождите, пока он больше не скажет *BUSY* слева от поля ввода команды.

В качестве альтернативы вы можете попробовать DrMinGW .

0 голосов
/ 08 июня 2012

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

...