Привет, сообщество Stack Overflow!
Итак, я сейчас прохожу курс по операционным системам и пытаюсь использовать отладчик GDB для установки точек останова для отслеживания выполнения некоторого кода для OS 161. Я играл с ним несколько часов, но я трудно понять, почему отладчик просто отображает имя функции, а не путь к файлу, в котором находится функция. Например, код для отображения меню расположен в /os161/os161-1.11/kern/main/main.c, и есть функция (threadtest3), которая вызывается, когда пользователь выбирает параметр с именем «tt3» и находится в файле с именем tt3.c. Его путь: ~ / os161 / os161-1.11 / kern / test / tt3.c
Проблема, с которой я столкнулся, не в установке точек останова, проблема, которую я пытаюсь понять, заключается в том, почему gdb отображает только имя функции при ее вызове, а не полный путь. Например, когда я устанавливаю точку останова в начале функции threadtest3, как только я выбираю опцию «tt3» в меню, отладчик показывает следующее:
Посмотрите, как отладчик отображает обратную трассировку, но только имена функций, которые были вызваны, и ничего не говорят о том, где находятся файлы или какая строка в одной функции вызвала другую? Я не уверен, почему это так, по сравнению с тем, как отладчик распечатывает номер строки, где выполнение находится в файле start.S, который на этом изображении является строкой 163.
Я использую GDB версии 6.6 (также Windows 10, если это актуальная информация), и сначала я подумал, что это версия моего отладчика, но на Youtube есть пользователь, у которого такая же версия, и его результаты не ведут себя как мой. (https://thewikihow.com/video_U4PYFgzevQ0)
Любые идеи?
Спасибо за любую информацию, которую вы можете предоставить.
***** ОБНОВЛЕНИЕ 11.03.2018 / *******
Итак, я попытался отредактировать файл defs.mk, который, согласно комментариям, содержит все ключевые слова и константы, используемые для компиляции. Этот файл находится в этом каталоге, показанном ниже
Когда я впервые просмотрел этот файл defs.mk, флаг CC был просто установлен на cs161-gcc. Поэтому после некоторого исследования и поиска похожих проблем отладки на этом сайте я попытался обновить эту строку, написав CC = cs161-gcc - g3 -ggdb. Я также проделал то же самое для HOST_CC и HOST_LDCC, которые вы можете увидеть здесь, на картинке ниже.
Затем, перейдя в каталог /os161/os161-1.11/kern/compile/ASST1, я запустил make clean, чтобы удалить все объекты файлы, созданные при запуске make. Затем я перенастроил ядро, перейдя в /os161/os161-1.11/kern/conf и запустив ./config ASST1. Когда я возвращаюсь к /os161/os161-1.11/kern/compile/ASST1 и запускаю make после выполнения make зависимости, я вижу, что он показывает вносимые изменения и похоже, что он компилирует файлы с включенным режимом отладки, но у меня все еще такая же проблема. Вы можете увидеть результат выполнения make ниже 

Any ideas?
Ваш код не был скомпилирован для отладки. Вам нужно перестроить его с флагом -g.
start.S (на который вы ссылаетесь с libc) было скомпилирован с -g, поэтому он показывает номер файла и строки.
So would I place the -g flag near ./config ASST1? Or somewhere else?
Вам нужно будет прочитать ./config и разобраться.
Если ваш config выглядит как это, вам нужно отредактировать ASST1 и убедиться, что в нем есть директива debug, например здесь.
Обновлять:
Ваши командные строки показывают, что -g действительно используется.
Тогда ваша проблема, вероятно, заключается в том, что вы отлаживаете неправильный двоичный файл.
Обычно создается исполняемый файл с полной отладкой, а затем запускается strip на его копии. Разрезанная копия - это та, которую вы загружаете на свою цель (или в эмулятор), и она намного меньше (потому что вся отладочная информация из нее удалена). Копию незастегнутый вы хотите передать своему отладчику. Если вы предоставите отладчику урезанную копию, он все равно будет работать, но не так, как вы хотите.
ОК. Я просмотрю это и буду держать вас в курсе. Спасибо
Итак, насколько я могу судить, конфигурационный файл, который у меня есть, похож на тот, что есть на github, и в ASST1 действительно есть директива отладки. Итак, я предполагаю, что если это так, тогда мне не нужно редактировать ASST1, а нужно просто прокручивать ./config, пока я не найду, как его правильно вставить? Я нахожу довольно странным, что наш профессор не предупредил нас об этом, и мне пришлось бы пройти через все это только для того, чтобы отладчик сделал что-то полезное. Я предполагал, что они добавят для нас флаги -g, поскольку это файлы, которые мы изначально не писали.
В пост выше добавлены фотографии, чтобы показать, что я сделал на данный момент.
@ avenger12 Обновленный ответ.
Ах, понятно, так что при настройке ядра я должен поставить флаг -g для этой команды? Инструкции для нашего текущего проекта говорят нам настроить ядро следующим образом:% cd ~ / os161 / os161-1.11 / kern / conf% ./config ASST1% cd ~ / os161 / os161-1.11 / kern / compile / ASST1% make зависимости% make% make install Итак, я бы поместил флаг -g рядом с ./config ASST1? Или еще где-нибудь? (Извините за тесноту формата)