The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Не работают точки останова в проекте для Netbeans."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Отладка и профилирование)
Изначальное сообщение [ Отслеживать ]

"Не работают точки останова в проекте для Netbeans."  +/
Сообщение от Azimuth (ok) on 25-Янв-11, 19:13 
Начал переходить с Винды на Линукс. Сижу на Ubuntu 10.04.
Есть проект, который собирается при помощи make-файла. Хочу отлаживать этот проект в Netbeans (6.9.1).
Создаю новый проект с существующими исходниками. Проект собирается, но точки останова не срабатывают.
Если создать полностью новый проект в Netbeans, то точки останова работают. Что нужно сделать с первым проектом, что бы стало легче жить?
(gdb 7.1)

make первого проекта:
============================================================================
EXECUTABLE=lola_run
CFLAGS=-MMD -D_FILE_OFFSET_BITS=64 -DMT -DLB_MODULE_NAME=\"$(EXECUTABLE)\" -DWITH_NONAMESPACES -DWITH_COOKIES -fomit-frame-pointer

LDFLAGS=/usr/lib/libboost_thread-mt.a /usr/lib/gcc/i486-linux-gnu/4.4.3/libstdc++.a  -lm -lpthread -lrt

CC=g++
FOUT=-o
LINK=$(CC) -o $(EXECUTABLE)
STRIP=strip $(EXECUTABLE)
BUILD_DIR=build
DEPS=$(BUILD_DIR)/trace.o $(BUILD_DIR)/envC.o ....

##### OS detect
OS=$(shell uname)
ifeq ($(OS), Linux)
# Linux stuff
CFLAGS+=-DLINUX
LDFLAGS+=-ldl
MAKE=make
else
ifneq (,$(findstring CYGWIN_NT, $(OS)))
else
$(error Unknown OS)
endif
endif
##### end of OS detect

# Add debug flags for 'make debug'
ifdef DEBUG
CFLAGS+=-DDEBUG -DNOCHECKLIC -Wall -g -O0
else
CFLAGS+=-O2 -DNDEBUG -w
ifeq (,$(findstring CYGWIN_NT, $(OS)))
endif
endif

CFLAGS+=$(LBFLAGS)
export CC
export CFLAGS
export BUILD_DIR
export FOUT

release: all
#    $(STRIP)

.PHONY: subdirs $(SUBDIRS)

$(SUBDIRS):
    $(MAKE) -C $@
    
Дальше всякие папки, зависимости и т.д.
$(BUILD_DIR)/%.o: %.c

-include $(DEPS:%.o=%.P)

lbsnmpcd.res:
    rc.exe /i "c:/Program Files/Microsoft Platform SDK/Include/mfc" /i "C:/Program Files/Microsoft SDKs/Windows/v6.0A/Include" /fo $(BUILD_DIR)/lbsnmpcd.res Lbsnmpcd.rc
debug:
    DEBUG=1 $(MAKE) all
    
clean:
    rm -rf $(BUILD_DIR) $(EXECUTABLE) $(EXECUTABLE).exe $(EXECUTABLE).exp $(EXECUTABLE).lib vc*.idb

make-файл "родного" проекта NetBeans
============================================================================
# Environment
MKDIR=mkdir
CP=cp
CC=g++
CCADMIN=CCadmin

# build
build: .build-post

.build-pre:
# Add your pre 'build' code here...

.build-post: .build-impl
# Add your post 'build' code here.......................

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Не работают точки останова в проекте для Netbeans."  +/
Сообщение от svn (??) on 26-Янв-11, 01:16 
> Что нужно сделать с первым проектом, что бы стало легче жить?

Исправить CFLAGS
Убрать
-fomit-frame-pointer (немного оптимизации и хана отладке)
Добавить
-O0 -g3

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Не работают точки останова в проекте для Netbeans."  +/
Сообщение от Azimuth (ok) on 26-Янв-11, 11:34 
> Исправить CFLAGS:
> Убрать -fomit-frame-pointer (немного оптимизации и хана отладке)
> Добавить  -O0 -g3

Спасибо. Заработало, но как-то странно:

Код с номерами строк, B-breakpoint.

0 int main ( int argc, char *argv[] )
1 {
B2    int a = 10;
3    string test = "text";
4    cout << "Hello" << " a= " << a << endl;
5    try
6    {
B7        boost::thread_group th_grp;
B8        switch ( argc )

Ctrl+F5
Первая остановка на строке 3. Затем все время жму F8(Step over):
1
3
4
7
8
Все это время при наведении на a и в окне variables а = 0, хотя cout << "Hello" << " a= " << a << endl; выводит 10. test = "text", Переданный int argc тоже имеет правильное значение.
F5
===============

Далее вызов функции:
0void get_account ( char *argv[], bool cycle )
01{
02    int test = 25;
03    string sTest = "qwerty";
B04    SVapi a;
05    a.soap->omode |= SOAP_C_UTFSTRING;
06    a.soap->imode |= SOAP_C_UTFSTRING;
B07    string server_ip ( argv[1] );
08    string server_port ( argv[2] );
B09    string endpoint = "http://" + server_ip + ":" + server_port;
10    a.endpoint = endpoint.c_str();
11    a.soap->cookie_max = 10;

Первая остановка 05 (по F8), 06, 07, 04, 07, 08, 09.
int test тоже = 0...
Если после первой остановки жать F5, но первый раз тоже останавливается на 05, проходит точно по точкам останова.
В других местах кода, при нажатии F8, так же бывает происходят перескоки выше по коду. (Эти участки кода не являются многопоточными). Если вставить такие места разного рода cout << "AAA" << endl;, то последовательность прохода востанавливается.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру