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

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

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

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


person RandomEngy    schedule 31.05.2011    source источник
comment
Файлы .o — это объектные файлы, которые содержат машинный код источника(ов), из которого он был скомпилирован. Объектные файлы могут содержать или не содержать символы отладки. .pdb — это «файлы базы данных программ», в которых хранится отладочная информация для исходных кодов и/или проектов Visual Studio. Если файлы .o не были созданы с включенной отладкой, невозможно создать репрезентативные файлы .pdb.   -  person this.josh    schedule 04.06.2011
comment
Если вы выполняете сборку с включенной отладкой, какую информацию вы можете получить?   -  person RandomEngy    schedule 04.06.2011
comment
он зависит от типа файла (COFF, XCOFF, DWARF2, ELF) и создает таблицы символов ударов, данные для трассировок, описания функций, внешние переменные, определения макросов, номера строк.   -  person this.josh    schedule 04.06.2011
comment
У вас возникли проблемы с использованием gdb или вы знаете, как bt и ctrl-C и print, но в файлах отсутствует необходимая информация?   -  person rubenvb    schedule 08.06.2012
comment
Не думаю, что я пробовал bt еще. Прошло некоторое время с тех пор, как я в последний раз пытался отладить сбой, но я попробую, если когда-нибудь столкнусь с другим из них.   -  person RandomEngy    schedule 09.06.2012
comment
Вы видели этот пост? windbg.info/forum/12-symbol-and-source-files-/ Похоже, что автор предоставил много информации по этой теме.   -  person Dan7el    schedule 13.12.2012


Ответы (4)


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

person xpol    schedule 03.06.2011
comment
Не могли бы вы объяснить свой ответ, как mingw и Code:blocks обеспечивают дополнительную отладку? - person this.josh; 04.06.2011
comment
Многие IDE и редакторы поддерживают использование (внешнего) gdb в качестве отладчика, но предоставляют вам удобный интерфейс исходного кода для пошагового просмотра и проверки переменных. Вы должны иметь возможность подключиться к уже запущенному процессу или запустить командную строку для отладки на уровне исходного кода. В вашем случае вы бы подключились к программе С# или запустили бы ее (конечно). Когда загружается неуправляемая dll, отладчик получает уведомление и загружает символы, устанавливает точки останова и т. д. - person doug65536; 03.01.2013
comment
Я сделал это, это работает. У вас не будет символов для чего-либо управляемого (исполняемый файл, к которому вы прикрепили отладчик), но dll, загружаемые в этом процессе, можно отлаживать так же, как и любой другой собственный код. - person doug65536; 03.01.2013

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

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

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

person jpmuc    schedule 31.01.2013

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

person kirsche40    schedule 08.06.2012

Вы можете создать файл .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.

person jcoffland    schedule 08.06.2016