Вопрос: Простой способ отладки MySQL ODBC driver?
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Old_Tuzik
- Житель
- Сообщения: 795
- Зарегистрирован: 28 авг 2007, 16:38
- Контактная информация:
Вопрос: Простой способ отладки MySQL ODBC driver?
Сильно подозреваю что в последнем билде MySQL Connector (i.e. ODBC driver) on Linux (both 32 and 64 bit) присутствует баг. Скомпилировал отладочнкю версию ОДБС драйвера, сделать тоже самое с Unix ODBC лениво. И вот когда запускаю свое приложение под ddd/gdb не могу добраться до вызовов драйвура что бы там пройти по коду. На Windows все было бы проще но там все работает правильно к сожалению. Что бы такое придумать что бы по быстренькому ?
ЗЫ: а да, вставку printf в тело драйвера и последующую рекомпиляцию и так 99 раз в цикле пож. не предлагать.
ЗЫ: а да, вставку printf в тело драйвера и последующую рекомпиляцию и так 99 раз в цикле пож. не предлагать.
- Old_Tuzik
- Житель
- Сообщения: 795
- Зарегистрирован: 28 авг 2007, 16:38
- Контактная информация:
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
холи-моли! Оказалост что разработчики последних версии MySQL ODBC Connector изменили много имен внутренних функции своего ODBC драйвера и они все globally visible now. И такие же имена импользованны в пользовательском приложении, поэтому бедный драивер вызывал через раз то свою то чужую функции и естественно все крашилось потому что прототипы функции были абсолютно разные. И таких функций совпало аж 5 штук - просто не возможнго себе представить, это как в лоторею выйграть, таже вероятность.
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Вопрос: Простой способ отладки MySQL ODBC driver?




- Old_Tuzik
- Житель
- Сообщения: 795
- Зарегистрирован: 28 авг 2007, 16:38
- Контактная информация:
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
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.
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?
обманываютalthough some people say that a limited concept of namespace is present in ANSI C

не оправдание:) нешто gcc отменили, готов отдать прошлый пирожок с мясом (и добавить еще один с картошкой) если нет порта gcc на все ети платформы:) да и откуда оверкилл использовать с++ как с с namespace? впрочем опять ето я так скорее поддержать болтовню на единственную тему которая мне тут действительно интересна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.

вот задачку хочешь? на интервю задаю
что означает запись
7[p]?
как такая запись может использоваться в с++ ?

- Marmot
- Графоман
- Сообщения: 39337
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
Ну это даже такие джависты как я знаютaissp писал(а): что означает запись
7[p]?

- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
а на второй вопрос? где можно увидеть в реальном коде? 

- Marmot
- Графоман
- Сообщения: 39337
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
здайусaissp писал(а):а на второй вопрос? где можно увидеть в реальном коде?
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
не буду пока портить кайф тузику 

- Marmot
- Графоман
- Сообщения: 39337
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
О, дошло, если у p [] overloaded, тогда если надо это дело обойти, шоб было как у людей...aissp писал(а):не буду пока портить кайф тузику
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
супер, осталось дать реальный пример 

- Old_Tuzik
- Житель
- Сообщения: 795
- Зарегистрирован: 28 авг 2007, 16:38
- Контактная информация:
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
nope, it just depends on how you define "namespace" and how far you are prepared to go.aissp писал(а):обманываютold_tuzik писал(а):although some people say that a limited concept of namespace is present in ANSI C
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]?
как такая запись может использоваться в с++ ?

- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
Re: Вопрос: Простой способ отладки MySQL ODBC driver?
я имел ввиду ключевое слово namespace
предлагаемые костыли по ссылке ужасны, потом под дебагом разбираться откуда чьи ноги растут - умереть не встать. а со структурой решение просто кандидат на увольнение, если пишешь на чистом си и не понимаешь что вызов функции по ссылке ето плохо (как афтар метода) то надо переходить на жаву
дык вроде с++ не означает иерархии классов
чисто удобные вещи как тот же namespace или reference или const... там много полезного (ужасного и очень ужасного тоже много)
да не на интервю там все хитрее сам трюк что
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
предлагаемые костыли по ссылке ужасны, потом под дебагом разбираться откуда чьи ноги растут - умереть не встать. а со структурой решение просто кандидат на увольнение, если пишешь на чистом си и не понимаешь что вызов функции по ссылке ето плохо (как афтар метода) то надо переходить на жаву

дык вроде с++ не означает иерархии классов

абсолютно согласен.А вот если начать использовать 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?
И раз уж зашла такая пьянка, побрюзжу и вспомню еще чего.
Был однажды (во времена MacOS 10.3-10.4, так что суть верна но детали могут быть не точны) один кросс-платформенный проект, в нем а какой то момент надо было загрузить произвольную таблицу (количсество переменных, записей не ограниченно) и показать во вьювере. На Windows состряпалось что по простому, обычное окно, ты двигаешься по файлу, читаешь ровно столкько сколько можешь показать и так ты делаешь до бесконечности.
На MacOS cначала в качестве framework был QT но устали платить роялти и перешли на Cocoa и писалось все на Objective C. Принцип тот же, ты двигаешься по файлу, читаешь ровно столкько сколько можешь показать и так ты делаешь до бесконечности. Но беда была в том что сам визуальный компнент (table) переодически выделял и освобождал память для своих нужд что бы отобразить данные. И вот тут происходило странное - было два доп. пула, т.е. когда память просто освобождается то она просто помечается в первом пуле как освобоженная (но в систему она не возратилась). Были доп API функции которые типа "а теперь все, шутки в сторону - освободить память по честному" и ... из первого пула инфа кочевала во второй а память по прежнеум в систему не возвращалась. Потраченно было смного сил, я просто не понимал в чем был смысл этих манипуляци на что apple ответил что смысл в том что "если вы в своем приложенни освободили память но потом попытались разименовать уже освобожненный указатель, то ваша программа не крашнется, а продолжит свое выполнение". И это было так на самом деле и наверно по своему удобно для тех кто особо и не следил за распределение памяти. Да и зачем, ведь все равно это не ведет к критической ощибке. Вот так иы и распрощались с мыслью загружать во вьювер гигабайты данных на МакОС потому как постепенно все доступная память была занята и начинался серьезный своппинг. Так что мы просто сдались потому как простого решения этой проблеме не было.
Был однажды (во времена 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?
какава у меня какой год стоит пугктом изучить, сколько раз брался столько раз замечал, что акцент на с++ появляется:( так и видимо помру с невыполненным заданием:(
про 7[p] я немножко приврал, в том смысле что вопрос то задаем, но ответ уже в принципе не важен. У нас писменный скрининг сперва, если кандадат его прошел, то дальше в принципе рещается подходит он в команду или нет (при условии что именно он тест написал), а чтобы было всем интересно, сперва мы ему задаем задачи по кайфу, потом его просим задавать нам задачи ну и попутно за жизнь болтаем. Так что все ети трики задачки они больше для развлечения
про 7[p] я немножко приврал, в том смысле что вопрос то задаем, но ответ уже в принципе не важен. У нас писменный скрининг сперва, если кандадат его прошел, то дальше в принципе рещается подходит он в команду или нет (при условии что именно он тест написал), а чтобы было всем интересно, сперва мы ему задаем задачи по кайфу, потом его просим задавать нам задачи ну и попутно за жизнь болтаем. Так что все ети трики задачки они больше для развлечения