metaclass: (Default)
[personal profile] metaclass
Либа nanomsg, кто-то тут в комментариях мне ее посоветовал.
http://comments.gmane.org/gmane.comp.lib.nanomsg/1277
Убил целый день, только ради того, чтобы тесты запустились и сфейлились корректно на машине, на которой рабочий порт этой либы занят чем-то, например другим инстансом проги.

Эти программисты нетрадиционной ориентации зовут на каждый мыслимый и немыслимый чих abort(), вместо того чтобы вернуть код ошибки, а этот abort() на винде вызывает диалоговое окно вида "всему копец, продолжаем, отлаживаем или игнорируем". В консольных приложениях из автотестов, да. Причем cmake ctest на винде игнорирует stderr, соответственно, чтобы найти причину ошибки - мне пришлось сначала перекопать это угребище windbg, а затем добавить OutputDebugString в виндовый билд.

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

Date: 2014-11-19 03:23 pm (UTC)
From: [identity profile] prepor.livejournal.com
Я, если что, не советовал, а упоминал ;)

Date: 2014-11-19 03:28 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Ну, польза от либы все равно есть
Я прочел как авторы либ псят на себя и друг на друга, пришел к выводу, что все они не в своем уме:)

Date: 2014-11-19 04:09 pm (UTC)
From: [identity profile] prepor.livejournal.com
Суcтрик милый такой дядечка, мы с ним пару раз пиво выпивали, он по-русски вполне себе говорит неплохо. Там какая-то забавная история с тем, что он в русскую школу ходил и язык с тех пор помнит :)

Date: 2014-11-19 04:12 pm (UTC)
From: [identity profile] swizard.livejournal.com
Это дурное влияние эрланга, вестимо: раз сообщения, значит, let it crash :)

Date: 2014-11-19 04:17 pm (UTC)
From: [identity profile] swizard.livejournal.com
А на самом деле, ты даже не можешь себе представить, какая это боль, беспомощность и безысходность -- корректная обработка ошибок в этих кластерах :( В большинстве случаев, действительно, намного проще грохнуть нахер весь процесс (с диагностикой) и рестартнуть его заново, чем разбираться, а чё это он перестал на сообщения отвечать, а может он занят, а может он болеет, а может у него в fsm-е баг, а может это сеть отвалилась...

Date: 2014-11-19 07:44 pm (UTC)
From: [identity profile] aamonster.livejournal.com
1. А не проще было перекрыть abort()?
2. Почему 1 в тестах не сделано?

Date: 2014-11-19 10:17 pm (UTC)
From: [identity profile] slonopotamus.livejournal.com
Что значит "перекрыть" в C?

Date: 2014-11-19 11:09 pm (UTC)
From: [identity profile] avnik.livejournal.com
LD_PRELOAD же?
(а может он вообще weak, я не помню таких тонкостей уже)

Date: 2014-11-20 06:12 am (UTC)
From: [identity profile] slonopotamus.livejournal.com
Первый пришедший в голову пример:

char *foo(char *a) {
  if (!b) {
    abort();
  }
  return b->func(a);
}


И как вы хотите это чинить LD_PRELOAD'ом?
Edited Date: 2014-11-20 06:12 am (UTC)

Date: 2014-11-20 06:38 am (UTC)
From: [identity profile] aamonster.livejournal.com
Зачем чинить? Речь о тестах. Пришёл abort - тест зафейлен.

Date: 2014-11-20 06:37 am (UTC)
From: [identity profile] aamonster.livejournal.com
signal(SIGABRT, &my_function_to_handle_aborts);
_set_abort_behavior
Ищется с ходу по словам abort override.

А вообще в C при необходимости перекрывается всё, но это уже хак.

Date: 2014-11-19 11:22 pm (UTC)
From: [identity profile] maxdz.livejournal.com
А нафига такие мучения с какими-то левыми библиотеками? Незамысловатые сокетные сервер и клиент (сервер многотредовый, с отдельным тредом на каждое входящее соединение) - пишутся ручками, за пару часов "с нуля"...
Edited Date: 2014-11-19 11:25 pm (UTC)

Date: 2014-11-20 04:08 am (UTC)
From: [identity profile] berezovsky.livejournal.com
Незамысловатая бессбойная очередь. За пару часов. С нуля.

Date: 2014-11-20 02:27 pm (UTC)
From: [identity profile] ext_1684112 (from livejournal.com)
А если еще в очереди есть хранилище. Приоритеты. TTL и максимальное количество попыток передоставки, а также устаревание сообщений.

У этого человека еще было замечательное шифрование xor'ом.
Edited Date: 2014-11-20 02:29 pm (UTC)

Date: 2014-11-20 05:31 pm (UTC)
From: [identity profile] maxdz.livejournal.com
Ксор отлично действует, кстати - быстро и достаточно "нечитаемо". Так что, прикинул, посносил всякие крипто-навороты и сделал-таки всё на ксорах. :)

Date: 2014-11-19 11:24 pm (UTC)
From: [identity profile] maxdz.livejournal.com
П.С. К слову, если это отладочная верия так валится - попробуйте релиз. Вполне возможно, что в отладочной версии стоят кучи ассертов, которые (если не переопределены) в консольных приложениях вызывают аборт().

Date: 2014-11-20 07:37 am (UTC)
From: [identity profile] metaclass.livejournal.com
Убирать ассерты из релиза, чтобы потом никто никогда не смог понять, почему софт по разному работает на столе и у заказчика?

Date: 2014-11-20 11:06 am (UTC)
From: [identity profile] maxdz.livejournal.com
Ассерты из релиза убираются, по умолчанию. Нужно поковырять код ручками, чтобы их в релизе оставить.

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

Date: 2014-11-20 03:17 pm (UTC)
From: [identity profile] osdm.livejournal.com
А потом эти люди будут говорить, что exception-ы - это зло.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 26th, 2025 01:44 pm
Powered by Dreamwidth Studios