Отладчик C ++ Eclipse: «Не удается найти границы текущей функции» и не останавливается на точках останова - PullRequest
4 голосов
/ 21 февраля 2009

Я использую Ubuntu в первый раз, и отладчик Eclipse доставил мне больше проблем, чем я мог справиться. На данный момент я просто хочу попытаться выяснить, как остановить «Не удается найти границы текущей функции», чтобы я мог видеть, где мой поток управления идет не так, как надо.

Я знаю, что это неопределенный вопрос, но я готов быстро предоставить любую необходимую информацию. Я около 2 часов гуглял информацию и включал и выключал разные вещи безрезультатно.

Я использую версию: 3.4.1 (я считаю, что самая новая)

Кроме того, мои контрольные точки не всегда работают (вероятно, около 25% успеха), даже если я установил их перед сборкой. Мой cout << или printf также не может печатать, пока программы не взорвутся. Это заставляет меня думать, что это какой-то параллельный процесс, который опережает отладчик, но я не знаю, как это исправить. </p>

Буду очень признателен за любую помощь. Я буду рядом.

1 Ответ

4 голосов
/ 21 февраля 2009

Не неслыханная проблема

Полагаю, вы можете подтвердить, что:

  • все общие библиотеки скомпилированы с флагом -g (отладка)?
  • и двоичный файл выходного приложения, кажется, в порядке, потому что он работает правильно в командной строке?
  • вы не компилируете с каким-либо framwework (например, Qt4 ), который потребует запуска qmake для генерации файла проекта, к которому вы добавите "CONFIG += qt debug"?
  • у вас нет никаких предупреждений во время сборки? (как это «Обнаружено искажение часов» сообщение)

Смысл всего этого:

Где-то, одна из библиотек или ваша собственная программа не содержат в себе «отладочную» информацию.

Флаг -g может быть установлен непосредственно в make-файле (и в этом случае он не особенно зависит от ОС).

Пример ( не предназначен для Linux )

CXX = g++
CXXFLAGS =  -O2 -Wno-deprecated -g
DEFINES = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DLITTLE_ENDIAN

##########################

COMPILE=$(CXX) $(CXXFLAGS) $(DEFINES)
LINK=$(CXX)

UNRAR_OBJ=filestr.o recvol.o rs.o scantree.o

OBJECTS=rar.o strlist.o strfn.o pathfn.o

.cpp.o:
    $(COMPILE) -D$(WHAT) -c -g $<

all:    unrar

clean:
    @rm -f *.o *.bak *~

unrar:    WHAT=UNRAR
unrar:    $(OBJECTS) $(UNRAR_OBJ)
    @rm -f makeunrar
    $(LINK) -Wl,-s -g -o unrar $(LDFLAGS) $(OBJECTS)
$(UNRAR_OBJ) $(LIBS)   

sfx:    WHAT=SFX_MODULE
sfx:    $(OBJECTS)
    @rm -f default.sfx
    $(LINK) -Wl,-s -g -o default.sfx $(LDFLAGS)
$(OBJECTS) -DSFX_MODULE

g++ -O2 -Wno-deprecated -g  -D_FILE_OFFSET_BITS=64
-D_LARGEFILE_SOURCE -DLITTLE_ENDIAN -DUNRAR -c -g
rar.cpp
[...]
g++ -Wl,-s -g -o unrar  rar.o strlist.o ...

Здесь этот make-файл содержит огромную ловушку:

g++ -Wl,-s -o unrar  rar.o strlist.o ...

-s обозначает «полосу», означающую, что вся отладочная информация, сгенерированная ранее, теряется в конечном выводе. Так что проверьте также ваши параметры ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...