Как увидеть код внешних библиотек при отладке - PullRequest
1 голос
/ 24 марта 2010

Прежде всего ... это мое сообщение № 1 в этом месте, так что ... пожалуйста, будьте милы со мной;)

Я только недавно начал изучать приложения / библиотеки Gnome и обнаружил, что отладчики являются отличным способом обучения, потому что наблюдение за выполнением кода очень помогает в понимании структуры программы.

Но у меня есть проблема. Например, при отладке gnome-панели я обнаружил много обращений к внешним функциям (в основном, к функциям GTK +), и хотя притворяться, что вижу весь код всех функций приложений, таких как этот вызов, было бы сумасшествием, есть много того, что будет очень интересно видеть в действии . Проблема в том, что в отладчике не загружен код этих библиотек, и он не может показать его мне - в большинстве случаев он показывает номер строки, где находится выполнение.

Я использую Nemiver , и когда он пытается ввести во внешней функции, она утверждает, что не может найти файл, который должен быть где-то. Например, при попытке войти в gtk_window_set_default_icon_name он пытается загрузить / build / buildd / gtk + 2.0-2.16.1 / gtk / gtkwindow.c и вызывает XSetIOErrorHandler, .. / .. / ЦСИ / ErrHndlr.c .

Так что теперь я думаю, что я делаю что-то не так ... Почему Невимер ищет эти исходные файлы в этих местах ??

В моей системе даже нет папок / build / buildd / ... и я не знаю, делаю ли я что-то не так, или мне нужно что-то установить или как.

Есть предложения? Как вы отлаживаете такого рода приложения?

С наилучшими пожеланиями и большое спасибо за ваше время - и простите, если мой английский плохой.

Ответы [ 2 ]

0 голосов
/ 28 марта 2010

Ну ... Вопрос был проще, чем я думал.

Поскольку Nemiver пытался получить доступ к некоторым несуществующим папкам, я подумал, что их создание будет возможным, и это был xDDDDD.

Nemiver имеет возможность загружать исходные файлы в Файл -> Открыть исходный файл [Я действительно не знаю точно ли это название опции, потому что я вижу программу на испанском языке] и когда вы выбираете его, открывается диалоговое окно, и один из двух его основных вариантов - выбрать, где вы хотите найти свой исходный файл: из исполняемого файла или из вашей файловой системы ... Я выбрал из исполняемого файла и там я увидел странные пути, начинающиеся с / build . Тогда я предполагаю, что исполняемый файл знает, где были исходные файлы, которые использовались для его создания ...

Подводя итог: я удовлетворил предположения Nemiver относительно путей к источникам, и теперь все работает автоматически.

Например: Поскольку Nemiver говорил мне, что файлы GTK + находятся в / build / buildd / gtk + 2.0-2.16.1 / gtk / Я создал / build / buildd и я скачал gtk + (2.16.1). Затем я распаковал его в buildd с именем gtk + 2.0-2.16.1 и теперь, когда я пытаюсь войти в функцию GTK +, Nemiver автоматически загружает соответствующий файл и показывает мне, что его выполнение шаг за шагом:)

0 голосов
/ 24 марта 2010

Отладчик выполняет строки в исходном файле, которые при компиляции (с включенными символами отладки) генерируют двоичный файл. В случае внешних библиотек они поставляются как отдельные объекты (объектные файлы) и связаны с текущим кодом для создания исполняемого файла.

Если бы отладчик мог перебирать исходные файлы, можно было бы сгенерировать исходные файлы, соответствующие библиотеке, и это нарушило бы многие профессиональные контракты. Так что я не уверен, возможно ли это.

Однако библиотека GTK, о которой вы говорите, является open source, а вызовы API задокументированы здесь . Итак, IMO лучше и много сэкономить время, чтобы знать, что делает конкретный вызов функции для библиотеки, и идти вместе с остальным кодом.

...