Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > CodeBlocks (C::B) игнорирует написанный код


Автор: ivanstanislavovich 11.8.2011, 20:10
Используется: Ubuntu 11, CodeBlocks 10.05, wxWidgeth, SQLite.
CodeBlocks игнорирует часть написанного кода даже при отладке шагами:
Код

void lllDialog::OnAbout(wxCommandEvent &event)
{
   wxMessageBox(wxT("error open")); // ШАГ 1
    
    sqlite3 *db ;
    char *errmsg;

    sqlite3_open("./db", &db) ;
    sqlite3_exec(db, "select * from test;", callback, NULL, &errmsg);
     
    wxMessageBox(wxT("opened")); // ШАГ 2
}

(Веду тсчетные попытки завести SQLite под C++ с IDE C::B)
Т.е. с шага 1 переходи на второй, пропуская все, что между ними. Есть какие-то идеи, комментарии по этому поводу?

Автор: bsa 11.8.2011, 22:04
отключи оптимизацию (в настройках компилятора должен быть ключ -O0, а -O1, -O2... - это оптимизация, из-за нее возникают такие проблемы при отладке)!!!

Автор: ivanstanislavovich 11.8.2011, 22:29
Цитата(bsa @ 11.8.2011,  22:04)
отключи оптимизацию (в настройках компилятора должен быть ключ -O0, а -O1, -O2... - это оптимизация, из-за нее возникают такие проблемы при отладке)!!!

Нашел настройки такие (Settings->Compile and debuging), но там не включена ни одна оптимизация, даже -O, -O1.
Project build options задан только "Produce debugging symbols [-g]".

Автор: afiskon 12.8.2011, 07:53
Может, отладчику взрывает мозг callback? Попробуйте вставить между sqlite3_ вывод чего-нибудь. И вообще не помешало бы для очистки совести этот lllDialog::OnAbout через IDA Pro прогнать.

Кстати, мне где-то попадались ОО-оболочки вокруг SQLite, даже вроде видел класс wxSQLite. Это не конкретно к вашему вопросу - просто использовать Си-функции в C++ коде - не комильфо.

Автор: ivanstanislavovich 12.8.2011, 08:37
afiskon, спасибо за ответ. 
Код

   wxMessageBox(wxT("error open"));
    sqlite3 *db ; // NO STEP IN
       sqlite3_open("./db", &db) ; // NO STEP IN
    int x = 1+2;
    wxString t ;
    t.Printf(wxT("New Message NO: %d"),x);
    wxMessageBox(t);
    wxMessageBox(wxT("opened"));

Все с комментарием "NO STEP IN" не выполняется. 

Цитата

lllDialog::OnAbout через IDA Pro 

К сожалению, я не достаточно развит для разбора дизассемблированного кода, по этому лишь положу такой во вложении.
Цитата

оболочки вокруг SQLite

Я такую тоже видел, даже пробовал установить/скомпилировать. Но мои потуги увенчались провалом.
Цитата

просто использовать Си-функции в C++ коде

Простите за не грамотность, но о каких функциях вы говорите ? "wxSqlite3_Open" ? А как вы ее насквозь видите ? 

Может поможе в разрешение проблемы: 
Код

#define sqlite3_open
#define sqlite3_exec

объявлено в CPP файле. Без них выводил сообщение об ошибке, на функциях sqlite3:
Цитата

undefined reference to sqlite3_open

с включенной "include <sqlite3ext.h>", в дополнение к "include <sqliter3.h>"
Цитата

sqlite3_api was not declared in this scope


Автор: asmdzen 12.8.2011, 08:55
Цитата(ivanstanislavovich @  12.8.2011,  08:37 Найти цитируемый пост)
#define sqlite3_open
#define sqlite3_exec

объявлено в CPP файле

т.е. это не реальные функции а какие то макросы? так дела не делаются )) может просто следует нужные библиотеки подключить вместе с хидерами?
в IDA листинге не вижу никаких следов от вызова sql функций.

Автор: ivanstanislavovich 12.8.2011, 09:08
Цитата

т.е. это не реальные функции а какие то макросы? так дела не делаются )) может просто следует нужные библиотеки подключить вместе с хидерами?


Есть исходники sqlite, могу выложить. Не знаю таких библиотек, по примерам делал - не подходили или не существовали. 
Ох, как я намучался за эту неделю с этим wxsqlite. Не в жалобу, а к тому, что брал явный код примера - и он не работал. При том что версии и прочее было такое же. В итоге шнырял по Интернету, дабы найти хоть какое-то решение. 

Цитата

в IDA листинге не вижу никаких следов от вызова sql функций.

это значит, что часть кода просто игнорируется, или что я не верно что-то сделал?

Автор: asmdzen 12.8.2011, 09:17
ivanstanislavovich, можете выложить хидер и cpp где описан этот OnAbout(т.е. класс lllDialog)? можете оставить только то что связанно именно с sql.

Автор: ivanstanislavovich 12.8.2011, 09:27
asmdzen, я благодарен Вам за оказание помощи. 

Во вложении запрашиваемое. 
Исходный код приложения - чистый проект с одной формой, генерируемый автоматически при создании проекта wxWidgeth. Я лишь изменил код на кнопке About и расширил шапку в CPP файле.

Автор: ivanstanislavovich 12.8.2011, 10:37
а в настройках компилятора можно задать, что-то вроде "пропускать код С" ?

Автор: asmdzen 12.8.2011, 10:38
Цитата(ivanstanislavovich @  12.8.2011,  09:27 Найти цитируемый пост)
Я лишь изменил код на кнопке About и расширил шапку в CPP файле.

это определенно не правильно, я никогда с sql не работал, но в sqlite3.h который Вы показали присутствуют только сигнатуры функций, т.е. следует подключить какие-то библиотеки по любому.
Почитайте внимательно туториал по sql откуда взяли код (откуда sqlite3.h), там должно быть написано что именно нужно подключать.
(так понимаю с wxSqlite Вы так же работали ))

Автор: ivanstanislavovich 12.8.2011, 10:41
компилятор "GNU GCC Compiler"
при компиляции выдает замечания: на стрке sqlite3_open:
Цитата

warning: left-hjand operand of comma has no effect

Автор: asmdzen 12.8.2011, 10:44
потому что вот это
Цитата(ivanstanislavovich @  12.8.2011,  08:37 Найти цитируемый пост)
#define sqlite3_open

превращает вызов 

Цитата(ivanstanislavovich @  12.8.2011,  08:37 Найти цитируемый пост)
sqlite3_open("./db", &db) ;

в
Код

("./db", &db) ;


Автор: ivanstanislavovich 12.8.2011, 10:48
asmdzen, я знаю как подключать библиотеки в VS под Windows, но как это делать в CodeBlocks под Ubuntu - не знаю, мне кажется все пересмотрел.
Примеры по wxSqlite и sqlite3 говорят, что нужно включать их в проект или компилировать снаружи, во всяком случае я так понял, и будет все ок. Но оба варианта заканчиваются разными обильными ошибками: не находятся другие библиотеки или еще что. Этот вопрос, с компиляцией, еще не разрешен. 
Да и вообще, сложилось впечатление, что мир отличный от Microsoft и Visual Studio очень слабо документирован и поддержуется. Уже неделю воюю: поставить IDE (CodeBlocks), настроить ее, включить интерфейс (wxWidgeth), подключить базу. На каждый шаг по 2-3 дня. С базой уже и дольше. 

Добавлено через 2 минуты и 10 секунд
Цитата

потому что вот это ... превращает вызов ... 

Спасибо. Мне еще предстоит многому научиться.

Автор: asmdzen 12.8.2011, 10:54
если wxwidgets уже скомпилены то можно вернутся к wxsqlite, думаю легче будет с ними работать, можно ведь подключить нужную библиотеку сразу.

Автор: ivanstanislavovich 12.8.2011, 11:20
asmdzen, хорошо. Пробую. 
компилирую под Ubuntu исходники.
Результат - они не видны в C::B (CodeBlock), нужно явно прописывать пути для всех .h
делал не по инструкции, а по шаблону, т.к. первая говорит о несуществующих вещах.
Цитата

./configure
make
make install

результат во вложении

Сейчас пробую методом добавления wxSQLite в проект, как видел когда-то где-то в Интернете.

Добавлено через 3 минуты и 40 секунд
Метод добавления в проект привел к ошибке 
Цитата

file:/wxsqlite3-2.1.2/src/wxsqlite3.cpp|18|
fatal error: wx/wxprec.h: Нет такого файла или каталога|

Пробую разрешить проблему...

Автор: ivanstanislavovich 12.8.2011, 11:41
Очень интересно, нашел куда включать библиотеки. Начало входить в ..Open после включения wxsqlite. А мне казалось, что wxsqlite лишь оболочка для sqlite... 
Кто думал, перестаньте думать на время, возможно у меня что-то вышло. Отпишусь

Добавлено через 13 минут и 2 секунды
Н.. не выходит. 
Я верно понимаю жизнь: если добавить библиотеку, то "inclufe ... .h" не нужен, хуже того, его просто может и не быть?

Автор: ivanstanislavovich 12.8.2011, 11:58
Попытки с SQLite
Цитата


Код

#inclufe <sqlite3.h> 
#inclufe <sqlite3ext.h> 

Цитата

Ошибка ..API..


Код

#inclufe <sqlite3.h> 
// плюс подключенная баблиотека: скомпилированная под Linux

Цитата

/projects/lll/lllMain.cpp|91|undefined reference to `sqlite3_open'|
/projects/lll/lllMain.cpp|92|undefined reference to `sqlite3_exec'|


с wxSQLite пробую...

Автор: xvr 12.8.2011, 12:15
Цитата(ivanstanislavovich @  12.8.2011,  11:41 Найти цитируемый пост)
Я верно понимаю жизнь: если добавить библиотеку, то "inclufe ... .h" не нужен, хуже того, его просто может и не быть? 

Нет, не верно - и библиотеку надо подключать, и include ...h делать (в исходнике). Иначе не соберется (или не откомпилируется)

Посмотрите в FAQ раздела для начинающих - там есть статья о процессе компиляции/линковки.

Автор: ivanstanislavovich 12.8.2011, 12:18
Попытки с wxSQLite
Подключена библиотека - "was not declaed in this scope"

Подключены .h - не находит файла

Явное указание расположения wxsqlite3.h - что-то странное (во вложении) и приложение не запускается.

Добавлено @ 12:19
Цитата

Посмотрите в FAQ раздела для начинающих - там есть статья о процессе компиляции/линковки

Спасибо за информацию. Уже ознакамливаюсь

Автор: xvr 12.8.2011, 12:28
Цитата(ivanstanislavovich @  12.8.2011,  12:18 Найти цитируемый пост)
Явное указание расположения wxsqlite3.h - что-то странное (во вложении) и приложение не запускается.

Ничего странного - ваше приложение собралось, но сломалось при старте (может не хватило каких то .so файлов)
Запустите из консоли ldd -v на ваш исполняемый файл

Автор: ivanstanislavovich 12.8.2011, 13:23
xvr, спасибо за помощь.
Во вложении результат работы "ldd -v"

Автор: xvr 12.8.2011, 19:47
Цитата(ivanstanislavovich @  12.8.2011,  13:23 Найти цитируемый пост)
Во вложении результат работы "ldd -v"

Вроде все на месте. А без sqlite программа не падает?

Автор: ivanstanislavovich 12.8.2011, 20:00
xvr,
Цитата

А без sqlite программа не падает?
 

Выключил .h, убрал код с About - падает. Убрал все Linker Library, search directories compiler, search directories linker - падает. 

пх-х-х...

Автор: Леопольд 12.8.2011, 20:33
ivanstanislavovich, у меня была только одна похожая проблема. Брейк поинты не срабатывали внутри анонимного неймспейса. Лечил тем, что временно выносил код в глобальный скоуп. Думается мне это скорее проблема gdb, которым я дебажу...

Автор: ivanstanislavovich 12.8.2011, 21:06
Леопольд, спасибо учту на будущее, если не забуду smile Но в данном случае проблема с этим из-за моего не грамотного использования define


Народ. Я немного продвинулся с мертвой точки.
Удалось скомпилировать библиотеки так, что бы их и проект видел. Добавил к проекту статическую библиотеку, добавил в нее файлы sqlite и скомпилировал. После добавил полученную библиотеку в проект. 
Но появилась новая проблема: 
Цитата

ld||cannot find -lwxstatic|

What this ?! 

Кстати, еще вопрос. Я уже задаю вопросы отошедшие от вопроса в данной темы, мне новую ветку (тему) создавать ?

P.S.: Пах-пх-пх. Ну почему все так сложно? Я таки понимаю, за что MS просит так много за свои продукты 

Добавлено через 4 минуты и 50 секунд
это когда добавляю полученную библиотеку ...

Добавлено через 9 минут и 35 секунд
А если не добавлять библиотеку, то не находит sqlite3_open ...

Добавлено через 11 минут и 14 секунд
если компилировать вместе (два проекта, без статической библиотеки) то:
Цитата

obj/Debug/wxstaticApp.o||In function `main':|
/projects/wxstatic/wxstaticApp.cpp|21|multiple definition of `main'|
/projects/wxstatic/sqlite-amalgamation-3070603/shell.c|2658|first defined here|
||=== Build finished: 2 errors, 0 warnings ===|

Да и метод не верный ...

Автор: ivanstanislavovich 12.8.2011, 21:23
да, забыл сказать, что wxstatic это я так назвал очередной новый проект для проб

Добавлено через 7 минут и 51 секунду
сменил имя проекта на "MyTwxWithStaticLib" - ошибка таже
Цитата

ld||cannot find -lMyTwxWithStaticLib|
||=== Build finished: 1 errors, 0 warnings ===|

Автор: ivanstanislavovich 12.8.2011, 21:41
Цитата

-------------- Build: Debug in MyTwxWithStaticLib ---------------

Linking executable: bin/Debug/MyTwxWithStaticLib
/usr/bin/ld: cannot find -lMyTwxWithStaticLib
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 0 warnings

а... зачем он там ищет мой проект ?! Как отучить?

Добавлено через 1 минуту и 27 секунд
ИХОО!!! Ща будет инфа, получилось

Автор: ivanstanislavovich 12.8.2011, 22:10
Получилось. Делал так:
Создал проект. Создал еще один - статичная библиотека. Добавил в проект файлы sqlite (http://www.sqlite.org/download.html), добавил в проект новые файлы (только для статичной библиотеки разрешил их использовать, компилировать), скомпилировал библиотеку, получил файл библиотеки, которую подключил в проект (для debug, release). Изменил и скомпилировал основной проект.
* файлы по ссылке sqlite-amalgamation сложить в директорию sqlite-amalgamation-3070603

В БД примера есть записей, три штуки: a, b c. 

Но беда еще одна появилась, не отображается нормально текст, вместо этого я вижу квадрат с крестом внутри. Это я такое видел, когда шрифт не поддерживал язык (русский), но текст в БД - Английский. 
Очередная проблема. Есть идеи по возможным методам ее разрешения?

Автор: ivanstanislavovich 12.8.2011, 22:14
отмена, это я не умею пользоваться языком. в коде нужно внести изменения в callback функцию:
Код

wxMessageBox(wxChar(*rows[1]));


ВСЕМ СПАСИБО! КАК ОТБЛАГОДАРИТЬ ?!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)