Вопрос: Простой способ отладки MySQL ODBC driver?

Все, что вы хотели знать о программизме, но боялись спросить.
Аватара пользователя
Old_Tuzik
Житель
Сообщения: 795
Зарегистрирован: 28 авг 2007, 16:38
Контактная информация:

Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение Old_Tuzik »

Сильно подозреваю что в последнем билде MySQL Connector (i.e. ODBC driver) on Linux (both 32 and 64 bit) присутствует баг. Скомпилировал отладочнкю версию ОДБС драйвера, сделать тоже самое с Unix ODBC лениво. И вот когда запускаю свое приложение под ddd/gdb не могу добраться до вызовов драйвура что бы там пройти по коду. На Windows все было бы проще но там все работает правильно к сожалению. Что бы такое придумать что бы по быстренькому ?

ЗЫ: а да, вставку printf в тело драйвера и последующую рекомпиляцию и так 99 раз в цикле пож. не предлагать.
Аватара пользователя
Old_Tuzik
Житель
Сообщения: 795
Зарегистрирован: 28 авг 2007, 16:38
Контактная информация:

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение Old_Tuzik »

холи-моли! Оказалост что разработчики последних версии MySQL ODBC Connector изменили много имен внутренних функции своего ODBC драйвера и они все globally visible now. И такие же имена импользованны в пользовательском приложении, поэтому бедный драивер вызывал через раз то свою то чужую функции и естественно все крашилось потому что прототипы функции были абсолютно разные. И таких функций совпало аж 5 штук - просто не возможнго себе представить, это как в лоторею выйграть, таже вероятность.
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение aissp »

;) для етого используют namespace ;) хотя сам небось отлично знаешь ;) а printf я очень люблю правда он не всегда работает ;)
Аватара пользователя
Old_Tuzik
Житель
Сообщения: 795
Зарегистрирован: 28 авг 2007, 16:38
Контактная информация:

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение Old_Tuzik »

namespace - yes and no.

Yes, the use of namespaces would help to solve a problem with duplicate names in this case.

No, the user app, the unixODBC Driver Manager, the MySQL ODBC driver, they all are written in ANSI C, so no namespaces can be used (although some people say that a limited concept of namespace is present in ANSI C)

It's kind of interesting why the last two components use C and I know for sure why the user app does that - it can be easily compiled and maintained on all supported/existing platforms such as Windows, MacOS (ppc/Intel), Solaris (sparc/intel), AIX, HP Unix / other flavors and even zLinux/S390 (mainframe). The same can be also done in C++ but the from a certain point of view it would be definitely an overkill, therefore in this case ANSI C is the way to go.
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение aissp »

although some people say that a limited concept of namespace is present in ANSI C
обманывают :)
It's kind of interesting why the last two components use C and I know for sure why the user app does that - it can be easily compiled and maintained on all supported/existing platforms such as Windows, MacOS (ppc/Intel), Solaris (sparc/intel), AIX, HP Unix / other flavors and even zLinux/S390 (mainframe). The same can be also done in C++ but the from a certain point of view it would be definitely an overkill, therefore in this case ANSI C is the way to go.
не оправдание:) нешто gcc отменили, готов отдать прошлый пирожок с мясом (и добавить еще один с картошкой) если нет порта gcc на все ети платформы:) да и откуда оверкилл использовать с++ как с с namespace? впрочем опять ето я так скорее поддержать болтовню на единственную тему которая мне тут действительно интересна :)

вот задачку хочешь? на интервю задаю

что означает запись

7[p]?
как такая запись может использоваться в с++ ? :)
Аватара пользователя
Marmot
Графоман
Сообщения: 39337
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение Marmot »

aissp писал(а): что означает запись

7[p]?
Ну это даже такие джависты как я знают :)
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение aissp »

а на второй вопрос? где можно увидеть в реальном коде? :)
Аватара пользователя
Marmot
Графоман
Сообщения: 39337
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение Marmot »

aissp писал(а):а на второй вопрос? где можно увидеть в реальном коде? :)
здайус
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение aissp »

не буду пока портить кайф тузику :)
Аватара пользователя
Marmot
Графоман
Сообщения: 39337
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение Marmot »

aissp писал(а):не буду пока портить кайф тузику :)
О, дошло, если у p [] overloaded, тогда если надо это дело обойти, шоб было как у людей...
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение aissp »

супер, осталось дать реальный пример :)
Аватара пользователя
Old_Tuzik
Житель
Сообщения: 795
Зарегистрирован: 28 авг 2007, 16:38
Контактная информация:

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение Old_Tuzik »

aissp писал(а):
old_tuzik писал(а):although some people say that a limited concept of namespace is present in ANSI C
обманывают :)
nope, it just depends on how you define "namespace" and how far you are prepared to go.

Example: namespace in C++:

Namespaces allow to group entities like classes, objects and functions under a name. This way the global scope can be divided in "sub-scopes", each one with its own name.

The format of namespaces is:

namespace identifier
{
entities
}


in C:
http://stackoverflow.com/questions/3898 ... paces-in-c

aissp писал(а): не оправдание:) нешто gcc отменили, готов отдать прошлый пирожок с мясом (и добавить еще один с картошкой) если нет порта gcc на все ети платформы:) да и откуда оверкилл использовать с++ как с с namespace? впрочем опять ето я так скорее поддержать болтовню на единственную тему которая мне тут действительно интересна :)


Если коротко то: по моему скромному опыту во многих случаях (особенно качающихся низкоуровнего програмирровния и прочее) попытки что то написать по могучему в " стиле С++" (как правило свойтсвенно начинающим программистам) т.е. начать с придумавания системы/иерархии классов там где ее просто нет либо начать опираться на могучие, развитые и очень щироко развитые библиотеки и фреймворки там где это не надо приводит в итоге к появлению монстрообразных, часто черезвычайно дорогих и очень тяжело поддерживаемых проектов которые часто развиваются по такому сценарию - приходят новые люди и начианаю переделывать старое (в силу ряда причин, их море). Через несколько иттераций мы имеем то что имеем. Долгий разговор но для разных задач используются разные инструмены - удел профессионала, "я умею только так, потому это мы и будет делать так как я умею" - удел тех кто учться не хочет.
А вот если начать использовать C++ только ради namespace - наверно можно (тут я с тобой согласен так что пирожок по прежнему твой), но только если это запланировать заранее а не когда в проекте за 25 лет накопилось xxxxxxx строк С кода.Согласен?
aissp писал(а): вот задачку хочешь? на интервю задаю
что означает запись
7[p]?
как такая запись может использоваться в с++ ? :)
Если честно то не знаю, и меня смущает что выражение нначинается с константы. Так что можешь секрет расказать что бы не томить остальных. Я интервью не прошел :oops:
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение aissp »

я имел ввиду ключевое слово namespace

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

дык вроде с++ не означает иерархии классов :) чисто удобные вещи как тот же namespace или reference или const... там много полезного (ужасного и очень ужасного тоже много)
А вот если начать использовать C++ только ради namespace - наверно можно (тут я с тобой согласен так что пирожок по прежнему твой), но только если это запланировать заранее а не когда в проекте за 25 лет накопилось xxxxxxx строк С кода.Согласен?
абсолютно согласен.

да не на интервю там все хитрее сам трюк что

7[p] == *(7+p) == *(p+7) == p[7] знают далеко не все, и ето мы обычно подсказываем :) а вот то что в такой форме нельзя [] перегрузить тут товарищ должен жогадаться сам - если да то с полки пирожок. ну и как применяется

MyFancyStruct
{};

MyFancyStruct qq[1024];

......

int length_of_qq = sizeof(qq)/sizeof(0[qq]);

:) от такая шутка

ну и на закуску еще одна любимейшая задача

дайте ответ на вопрос too be or not too be :)
Аватара пользователя
Old_Tuzik
Житель
Сообщения: 795
Зарегистрирован: 28 авг 2007, 16:38
Контактная информация:

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение Old_Tuzik »

И раз уж зашла такая пьянка, побрюзжу и вспомню еще чего.

Был однажды (во времена MacOS 10.3-10.4, так что суть верна но детали могут быть не точны) один кросс-платформенный проект, в нем а какой то момент надо было загрузить произвольную таблицу (количсество переменных, записей не ограниченно) и показать во вьювере. На Windows состряпалось что по простому, обычное окно, ты двигаешься по файлу, читаешь ровно столкько сколько можешь показать и так ты делаешь до бесконечности.
На MacOS cначала в качестве framework был QT но устали платить роялти и перешли на Cocoa и писалось все на Objective C. Принцип тот же, ты двигаешься по файлу, читаешь ровно столкько сколько можешь показать и так ты делаешь до бесконечности. Но беда была в том что сам визуальный компнент (table) переодически выделял и освобождал память для своих нужд что бы отобразить данные. И вот тут происходило странное - было два доп. пула, т.е. когда память просто освобождается то она просто помечается в первом пуле как освобоженная (но в систему она не возратилась). Были доп API функции которые типа "а теперь все, шутки в сторону - освободить память по честному" и ... из первого пула инфа кочевала во второй а память по прежнеум в систему не возвращалась. Потраченно было смного сил, я просто не понимал в чем был смысл этих манипуляци на что apple ответил что смысл в том что "если вы в своем приложенни освободили память но потом попытались разименовать уже освобожненный указатель, то ваша программа не крашнется, а продолжит свое выполнение". И это было так на самом деле и наверно по своему удобно для тех кто особо и не следил за распределение памяти. Да и зачем, ведь все равно это не ведет к критической ощибке. Вот так иы и распрощались с мыслью загружать во вьювер гигабайты данных на МакОС потому как постепенно все доступная память была занята и начинался серьезный своппинг. Так что мы просто сдались потому как простого решения этой проблеме не было.
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Re: Вопрос: Простой способ отладки MySQL ODBC driver?

Сообщение aissp »

какава у меня какой год стоит пугктом изучить, сколько раз брался столько раз замечал, что акцент на с++ появляется:( так и видимо помру с невыполненным заданием:(

про 7[p] я немножко приврал, в том смысле что вопрос то задаем, но ответ уже в принципе не важен. У нас писменный скрининг сперва, если кандадат его прошел, то дальше в принципе рещается подходит он в команду или нет (при условии что именно он тест написал), а чтобы было всем интересно, сперва мы ему задаем задачи по кайфу, потом его просим задавать нам задачи ну и попутно за жизнь болтаем. Так что все ети трики задачки они больше для развлечения
Ответить