#c #debugging #gcc #gdb
#c #отладка #gcc #gdb
Вопрос:
Вероятно, это очень простой вопрос. Однако я не смог найти никакого ответа, поискав в Интернете.
У меня есть код, который мне нужно отладить, написанный на C . Для этого кода мне требуется использовать GCC 4.1.2 по соображениям совместимости, и я использую GDB 6.6-45. Я скомпилировал код с -g -Wall -O0
флагами, чтобы убедиться, что код может быть отлажен с помощью GDB.
Моя проблема в том, что где бы я ни устанавливал точку останова, никакие точки останова не достигаются. Кроме того, в конце запуска я получаю это сообщение «Вы не можете этого сделать без процесса для отладки».
Судя по звучанию сообщения, я думаю, что упускаю из виду очень тривиальную вещь. Однако я не могу понять.
Любая помощь была бы признательна.
Редактировать:
Платформа, над которой я работаю, — Fedora 8 на VirtualBox. Причина, по которой я работаю над VirtualBox, заключается в том, что я был недостаточно хорош, чтобы правильно установить старую версию GCC (4.1.2), не нарушая Fedora 20, которая является последней.
Согласно выводам GDB, (это очень просто):
[localhost]$ gdb programName
GNU gdb Red Hat Linux (6.6-45.fc8rh)
... typical messages
This GDB was configured as "i386-redhat-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) run programName (program arguments here)
...
Program outputs and messages
...
Program exited normally.
You can't do that without a process to debug.
(gdb)
То, что показано выше, — это все, что у меня есть. Чтобы установить свои контрольные точки, я сделал что-то похожее на:
break main
break System::function_name
break System::line_number
и когда я запускаю info breakpoints
, точки останова действительно показывают правильный файл cpp и номер строки или имя функции с включенным флагом yes.
Комментарии:
1. Знание платформы, на которой вы находитесь, может быть полезно тем, кто предоставляет ответы.
2. Покажите выходные данные вашего сеанса gdb.
3. А, ладно. Я отредактирую. Я не был уверен, как мне следует задать этот вопрос.
4. Как вы устанавливаете точки останова?
5. Из вашей командной строки в вашем виртуальном окне введите
echo $SHELL
и проверьте, действительно ли файл, который она вам выдает, существует.
Ответ №1:
По возможности старайтесь избегать флага -O и использовать только -g -Wall. Я видел некоторые проблемы с флагом -O в более старых версиях. Но я не уверен, сохраняются ли они и в новом gcc. Просто попробуйте.
Комментарии:
1. На самом деле, у меня изначально не было
-O
флага. В качестве попытки решить проблему я добавил флаг. Результаты те же.