2013-10-03 3 views
8

Я использую gdb для отладки исходного кода проекта C. Я собираю, как показано:Нет исходного файла с именем main.c. Настройка точки останова gdb

./configure --enable-debug CFLAGS="-g -o0" 
make --debug=a 

Я хочу отладить остановку в определенном файле. Так что, когда я поставил точку останова с помощью

(gdb) break main.c:672 

Он говорит:

No source file named main.c. 

Даже когда я прохожу конкретное имя функции (в main.c файл), чтобы сломаться. он говорит: такая функция не определена.

В моем текущем каталоге указан этот файл main.c. Я использую Cygwin для Windows. Когда я поставил точку останова с помощью

(gdb) break main 

Он установил точку останова на основной функции Cygwin файла, а не в моем исходном коде.

  1. Как я могу исправить свою первую проблему?

  2. просто любопытно, как избежать второй проблемы, если в файлах Cygwin и моем исходном коде есть такое же имя функции?

ответ

2

Если вы собираете с -g и до сих пор не в состоянии установить контрольную точку, попробуйте добавить raise(SIGTRAP) в вашем main(), запустить процесс в GDB, а затем установить точку останова вы хотите еще раз после того, как он попадает в SIGTRAP.

5

При компиляции файла .c, убедитесь, что вы используете:

gcc filename.c -g 

gdb <binary name> 

Поиск отладки нагрузки символов сделано или нет?

Если нет:

gdb) symbol-file <path-of-symbol-file> 

вы можете найти файл символов в каталоге OBJ

+0

Чтение символов из .libs/slim ... done.он показал, что сообщение, я думаю, загрузка символов в порядке. – arslan

+0

вы можете опубликовать моментальный снимок всей проблемы, так как вы компилируете –

+0

Я добавил информацию о компиляции, пожалуйста, просмотрите – arslan

1

Всякий раз, когда вы должны использовать GDB, введите следующую команду в командной строке

gcc -g -o outputfile sourcefile.c 

Теперь напечатайте

gdb -tui outputfile 

, а затем введите команду прерывания

+0

gdb -tui outputfile. Я запустил это, и он открыл область в верхней части терминала, у нее есть сообщение «нет источника». после этого я попытался установить перерыв, и тот же «Нет исходного файла с именем main.c.» сообщение. – arslan

+0

, пожалуйста, просмотрите мои команды компиляции, есть ли проблемы? – arslan

2

Критический параметр gcc -g во время компиляции.

Все остальное является вторичным.

См breakpoints in GDB

2

Я также сталкивался с аналогичной проблемой ранее. Я просто удалил папку .metadata и снова импортировал конкретный проект, и это хорошо работает.

Смежные вопросы