Поэкспериментировал c перехватом сегфолтов. Способ с core.sys.linux.execinfo можно признать частично рабочим. Рабочий т.к. рожает стактрейс, частично т.к. инфа в нем зависит от множества факторов. Это и сбило меня с толку, я вызывал обращение к null к делегату, что вызывает уход стактрейса в другие либы + где-то в коде выше был dlopen. Не помню, как там енти трейсы работают, поэтому снова заменил динамическую подгрузку либы на линковку, ну а с делегатами уже разберусь. Получается в проге устанавливается хандлер на SIGSEGV, чекает флаг отладки в env-переменных, если он есть, то только печатает в stderr, если нет - создает файл и сливает стактрейс туда. Трейс в файле получается тоже частичным и не особенно удобным т.к. печать номеров строк зависит от вызова assert(0) в конце хандлера, наверное есть какой-то способ, хз. Но в целом это уже близко к тому, что мне нужно, хотя бы частично, хотя бы пока только под линуксом.
Наконец-то отловил бесящий меня плавающий баг, когда ПКМ по дереву узлов в TreeView случайно сегфолтил, а все потому, что попадал между узлами и выделенный узел был null. Надеюсь, что отсутствие аналога NPE в языке это техническая необходимость\производительность\etc, а не проявление синдрома утенка.