metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-11-19 06:06 pm

Везет как QA

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

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

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

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

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

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

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


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

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

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

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