C : точки останова не работают

#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 флага. В качестве попытки решить проблему я добавил флаг. Результаты те же.