2013-03-04 7 views
8

Я попытался найти этот вопрос в Интернете, но, похоже, я не могу найти хорошее решение для своей проблемы. Ну, я пытаюсь использовать gdb для отладки моей программы на C++. И программа состоит из простых main.cpp и model.h. И компиляции командаКак использовать gdb для файлов заголовков C++?

g++ -Wall -g -c main.cpp 
g++ -Wall -g main.o -o OUTPUT 

Как почти все алгоритм хранится в model.h, мне нужно отлаживать файл заголовка, а не файл CPP. Однако, когда я попытался поставить точку останова на заголовок, как

tbreak model.h:163 

GDB всегда дает мне сообщение, что «Нет исходный файл не с именем TNFmodel.h».

В другом вопросе breakpoints in GDB, я увидел решение, добавив папку, содержащую заголовок, в библиотеку с помощью «dir». Но мой заголовочный файл уже находится в исходной папке, и после попытки

dir ./ 

Проблема сохраняется.

Значит, кто-нибудь знает, что случилось? Как использовать gdb для отладки файла заголовка?

+2

был заголовок также включен из этого места при компиляции? Возможно, вы можете опубликовать выходные данные gdb при вводе 'info sources'. – Nobody

+0

Ouch ... Я проверил источники и увидел проблему сейчас ... Случай с письмом не совпал. Ну, я не знаю, как я прошел компиляцию ... Но, возможно, это потому, что я использую mac, а иногда случаи не чувствительны при компиляции. После исправления дела gdb отлично работает для заголовка. Благодарю. – Chong

ответ

3

Как было предложено https://stackoverflow.com/users/760746/nobody, один из способов, чтобы убедиться, заголовок, чтобы быть в источниках, чтобы veryfy его, проверяя

info sources 

После обеспечения того, чтобы заголовок находился в источниках (в моем случае проблема в том, что случай буквы в заголовке был замешан, и каким-то образом он прошел через компиляцию в моей книге mac), вставив точку останова в строках файла заголовка работает просто отлично.

+0

Причина этого работы с Mac-книгой заключаются в том, что диск был отформатирован без учета регистра, поэтому случай с именем файла не делал никаких различий. – Chong

1

Попробуйте использовать перерыв с классом/имя метода, как это:

break class::method 
+0

Так что я не могу идти прямо внутри линии этого метода, но сначала нужно сначала перейти к методу, а затем проследить до строки, которую я хочу, чтобы она сломалась? Это звучит ... не очень удобно ... – Chong

+0

Я не знаю никакой другой возможности, sry dude – duDE

+1

Меня тоже нет, поэтому я прошу ... Иногда эта функция неудобна ... – Chong

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