Здравствуйте, __Nicolay, Вы писали:
J>>пальцем в небо — исключение пересекает границу so? У меня такая радость с gcc безо всяких корутин — исключение из so в главной проге не всегда ловится (с gcc3 проблем не было, началось с gcc4). __N>О! У нас та же проблема. Как боретесь?
Пальцем в небо — проблема с идентификацией типов? Можно попробовать catch(...) — ловит ли он?
J>>>пальцем в небо — исключение пересекает границу so? У меня такая радость с gcc безо всяких корутин — исключение из so в главной проге не всегда ловится (с gcc3 проблем не было, началось с gcc4). __N>>О! У нас та же проблема. Как боретесь? EP>Пальцем в небо — проблема с идентификацией типов? Можно попробовать catch(...) — ловит ли он?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, __Nicolay, Вы писали:
J>>>пальцем в небо — исключение пересекает границу so? У меня такая радость с gcc безо всяких корутин — исключение из so в главной проге не всегда ловится (с gcc3 проблем не было, началось с gcc4). __N>>О! У нас та же проблема. Как боретесь?
EP>Пальцем в небо — проблема с идентификацией типов? Можно попробовать catch(...) — ловит ли он?
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, __Nicolay, Вы писали:
J>>>пальцем в небо — исключение пересекает границу so? У меня такая радость с gcc безо всяких корутин — исключение из so в главной проге не всегда ловится (с gcc3 проблем не было, началось с gcc4).
__N>>О! У нас та же проблема. Как боретесь?
J>Да никак. Запускаем еще раз под gdb и смотрим, где отвалилось. Все равно это редко и случается обычно только на этапе инициализации, когда конфиг кривой или файл не нашелся или еще чего-нибудь... в остальных случаях все летает внутри DLL и успешно ловится.
Понятно, мы тоже вообщем когда напарываемся, добавляем обработчик внутри библиотеки.
N>Насколько я понимаю stream.read_string() (который RESPStream) читает строку из потока до '\0' а значит наверно проще будет дополнять buffer[bytes_read+1] = '\0' N>А что бы гарантировать что мы не вылезем за пределы buffer можно алоцировать его на байт больше инициализировав последний '\0' значением, что наверно проще чем занулять буфер. N>Хотя тут же в коде нет проверки на то что что bytes_read != 0 а в резултатет можно получить в value ложный 0.
Там вообще strtod нельзя вот так использовать, т.к. в случае ошибки он возвращает ноль а указатель я не проверяю. Возможно я на boost.spirit там все перепишу, так как там еще метки времени в ISO формате нужно будет парсить, так что проще притащить sprit чем велосипедить.