Size: a a a

2021 January 29

A

Alex in pro.cxx
нет, стоп, не пробовал
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
Ну да, вот изучаю его
Не, я конкретно про set_terminate_handler или как оно там
источник

ПК

Побитый Кирпич... in pro.cxx
Там же должен быть стек нормальный
источник

A

Alex in pro.cxx
Да, понял. Это плохой вариант, потому что terminate handler нужно в каждом потоке ставить, т. е. это нельзя сделать без модификации функции потока.
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
Да, понял. Это плохой вариант, потому что terminate handler нужно в каждом потоке ставить, т. е. это нельзя сделать без модификации функции потока.
При падении прилаги винда сама может сделать дамп. Такой вариант не рассматривал? Там надо какие то настройки вроде в реестре включить для этого
источник

A

Alex in pro.cxx
Поищу, спасибо. Но не факт, что она даст лучший стек, чем я получаю в обработчике сигнала abort
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
Поищу, спасибо. Но не факт, что она даст лучший стек, чем я получаю в обработчике сигнала abort
Не факт, что в этом обработчике можно что то подобное делать (см. signal safety).
источник

ПК

Побитый Кирпич... in pro.cxx
Я ещё видел как в static void translate_seh( unsigned int, EXCEPTION_POINTERS *ex )
вызывается создание минидампа
источник

A

Alex in pro.cxx
Да, не факт, что можно, но я аккуратно (без динамических выделений памяти и пр.), и дамп успешно создаётся.
translate_seh - я так понимаю, речь об обработчике, который устанавливается через _set_se_translator? Если да, то он per-thread, т. е. уже не годится, если хочется, чтобы работало для всех и любых потоков. И у проблема в том , abort() вообще не генерирует SEH исключение, иначе бы его и top-level unhandled handler ловил.
источник

GF

Georgy Firsov in pro.cxx
Alex
Да, понял. Это плохой вариант, потому что terminate handler нужно в каждом потоке ставить, т. е. это нельзя сделать без модификации функции потока.
источник

A

Alex in pro.cxx
Только что ещё раз перепроверил: он, может, и global, но в каждом потоке свой
источник

A

Alex in pro.cxx
и когда я регистрирую в главном потоке, исключение в std::thread(...) этот хэндлер не вызывает
источник

ПК

Побитый Кирпич... in pro.cxx
global thread_local
источник

DP

Denis Paukaev in pro.cxx
Alex
Это проблема потому, что я не вижу способа отделить фатальное исключение (для которого забыли catch) от такого, которое будет обработано
т.е. достаточно уметь из обработчика веха понимать, что для данного потока не усталовлен в данный момент пользовательский сех фрейм?
источник

GF

Georgy Firsov in pro.cxx
Побитый Кирпич
global thread_local
Я в упор что-то не вижу, что он thread local. Ладно, это не суть
А тогда как трактовать "global" в этом случае?
источник

ПК

Побитый Кирпич... in pro.cxx
Georgy Firsov
Я в упор что-то не вижу, что он thread local. Ладно, это не суть
А тогда как трактовать "global" в этом случае?
https://docs.microsoft.com/ru-ru/cpp/c-runtime-library/reference/set-terminate-crt?view=msvc-160&viewFallbackFrom=vs-2019

> In a multithreaded environment, terminate functions are maintained separately for each thread. Each new thread needs to install its own terminate function. Thus, each thread is in charge of its own termination handling.
источник

A

Alex in pro.cxx
Denis Paukaev
т.е. достаточно уметь из обработчика веха понимать, что для данного потока не усталовлен в данный момент пользовательский сех фрейм?
Не сех, а обычный С++ catch. Или под капотом это одно и то же? Это можно как-то выяснить внутри обработчика VEH?
источник

GF

Georgy Firsov in pro.cxx
Alex
Не сех, а обычный С++ catch. Или под капотом это одно и то же? Это можно как-то выяснить внутри обработчика VEH?
catch через SEH работает тоже
К слову catch(...) ловит сехи. Мб в этом ещё проблема?
источник

A

Alex in pro.cxx
нет, это не проблема, пусть ловит. Я экспериментирую на потоке, в котором нет catch (или есть где-то, но в текущем стеке вызовов)
источник

DP

Denis Paukaev in pro.cxx
Alex
Не сех, а обычный С++ catch. Или под капотом это одно и то же? Это можно как-то выяснить внутри обработчика VEH?
под капотом там обычно сех у плюсового try/catch
источник