Коллеги, предлагаю улучшить ядро. Опять ). Предлагаю дополнить его средством консольной "раскрутки стека" при авосте. Исключительно необходимая вещь при системном программировании, поскольку красивые ББ-шные стеки далеко не всегда могут быть показаны при системных ошибках.
Вот пример консольного дампа, заимствован у Ивана Андреевича Денисова: ivan@debian:~/bbcp/BlackBox$ ./blackbox TRAP 21 (precondition violated)
0: Ports.Port.Init [@=1841] <PC=0000002C FP=FFA0160C> 1: HostWindows.Directory.Open [@=34116] <PC=000032A1 FP=FFA01634> 2: StdDialog.Open [@=8136] <PC=00000EFD FP=FFA01990> 3: StdLog.Open [@=3796] <PC=00000541 FP=FFA01BD0> 4: Kernel.Call [@=37184] <PC=00002397 FP=FFA01BFC> Как видите, за образец принят обычный ББ-шный дамп (трамп = трап-дамп:)
Чтобы сделать это счастье системщикам, я переделал DefaultTrapViewer и то, как он в ядре вызывается. Затем я наткнулся на проблему повторных авостов - тех, которые возникают во время обработки ранее возникшего авоста. И, чтобы ББ не падал молча, пришлось еще больше правок внести в механизм отработки авостов.
Поскольку эту работу я проделывал в тесном контакте с Иваном Андреичем, она внесена в ядро 1,8 и там может быть прочитана, попробована и критикована.
Поскольку обход стека используется не только при авосте, я выделил его в отдельный механизм в ядре. Он не экспортирован )). Однако, кмк, он хорош, и относится к разряду средств метапрограммирования или рефлексии - похож на GetRefProc и GetRefVar. Поэтому называется GetRefFrame.
Поскольку интерфейс ядра нужно беречь, и "пальцами и яйцами в солонку не тыкать", интерфейс GetRefFrame не экспортирован. Однако для своих нужд в другом модуле я дублирую этот код; это вполне возможно, и не опирается ни на какие другие секретные внутренности ядра. Мне было бы удобно, если бы ядро этот интерфейс опубликовало. Сначала пробовали разместить эти средства в Services, однако, поскольку они используются именно в самом ядре, это оказалось невозможным.
Приглашаю заинтересованных лиц вникнуть в предложение и высказать свою конструктивную критику и предложения. Вникнуть можно, скачав версию 1.8. (На днях туда из "горящего хобота" добавятся поправки для повторных авостов).
Последний раз редактировалось adimetrius Суббота, 08 Февраль, 2020 23:42, всего редактировалось 1 раз.
|