Отладка программы OSX на Snow Leopard, которая была построена на Lion

#xcode #gdb #osx-lion

#xcode #gdb #osx-lion

Вопрос:

У меня есть программа, которую я создаю с использованием автоматического подсчета ссылок и Lion SDK. Эта программа ведет себя не так, как ожидалось в Snow Leopard (одно представление не будет загружено, и при открытии документа программа зависает.) поэтому я хочу отладить ее там. Но поскольку я не могу скомпилировать ее под Snow Leopard, я понятия не имею, как это сделать.

Итак, как мне получить символы отладки в gdb или я могу отладить эту вещь в Xcode — возможно, есть удаленный способ или что-то в этом роде?

Комментарии:

1. Как насчет использования виртуальной машины?

Ответ №1:

Вы можете выполнять удаленную отладку через gdbserver :

 snow-leopard$ gdbserver :10000 /path/to/exe
lion$ gdb /path/to/exe
(gdb) target remote snow-leopard:10000
 

Более простой способ — скопировать весь ваш исходный код и каталог сборки в snow-leopard и выполнить локальную отладку с помощью GDB. Даже если вы не собирали там, GDB все равно сможет найти все, что ему нужно.

Ответ №2:

К сожалению, мои исследования показывают, что компилятор «g » на Snow Leopard больше не помещает в связанный модуль символы, которые имеют какое-либо значение для «gdb». Единственными найденными символами являются вымышленные символы, созданные для придания уникальности ВСЕМ символам. Вот краткий пример:

 `_Z5DoSVCi', function, 0x151dd
`_Z7SEBTrapv', function, 0x1383c
 

Те же символы в Tiger были такими:

 `_Z5DoSVCi'  `DoSVC(int)', FUNCTION, 0x1394c
`_Z7SEBTrapv'  `SEBTrap()', FUNCTION, 0xf994
 

«Подпись» — это то, что «gdb» необходимо для решения таких проблем, как: break emsvc.c: DoSVC
Кроме того, у вас все равно должны быть все «объектные колоды», такие как emsvc.o, потому что Snow Leopard «g «, по-видимому, больше не содержит символов в связанном модуле.

Я перенес скомпилированный модуль «g «, связанный с Tiger (на базе Intel), на Snow Leopard без декодирования объектов, и «gdb» смог отлично с этим справиться, включая установку точек останова. По-видимому, «g » или компоновщик не создают надлежащие модули для «gdb» на Snow Leopard.