Size: a a a

2020 December 12

ПК

Побитый Кирпич... in pro.cxx
Alex
Илья властью шерифа объявил рантайм рефлексию вне закона, тут вам не java)
В Qt том же это юзается всё (особенно в связке с QML)
источник

A

Alex in pro.cxx
QML - ненативное исчадие джаваскрипта, что с них взять
источник

A

Alex in pro.cxx
А вот скажите, почему у меня на винде (MSVC 2019) включены structured exceptions (/EHa), стоит unhandled exception filter, он ловит падения, в том числе из доп. потоков, но если поток бросает исключение и не ловит, то просто вызывается abort() и до хэндлера не доходит? Т. е. я не могу записать минидамп.
источник

A

Alex in pro.cxx
И я бы подумал, что исключения в потоках так и работают, никуда не денешься, но из релизной версии, собранной всего неделю назад, я получал от юзеров дампы именно с такой проблемой - непойманное исключение в потоке. А на двух моих девелоперских машинах дампы не создаются, потому что приложение просто абортится (и в дебажной, и в релизной конфигурации).
источник

A

Alex in pro.cxx
Потоки - std::thread, у которых под капотом _beginthreadex. Есть на SO заявления, что _beginthreadex ставит свой фильтр и тем самым перетирает пользовательский, но, похоже, эта информация устарела - я посмотрел исходники  этой функции (которые лежат в Windows SDK) и не вижу ничего такого (ни SetUnhandledExceptionFilter, ни __try).
источник

m

magras in pro.cxx
Alex
А вот скажите, почему у меня на винде (MSVC 2019) включены structured exceptions (/EHa), стоит unhandled exception filter, он ловит падения, в том числе из доп. потоков, но если поток бросает исключение и не ловит, то просто вызывается abort() и до хэндлера не доходит? Т. е. я не могу записать минидамп.
Точного ответа на вопрос я не знаю, но попробуй поставить тот же хендлер еще на terminate (через std::set_terminate). Если я правильно помню, когда я встречался с breakpad под видной он ставил свои хендлеры и на terminate и на что-то системное.
источник

m

magras in pro.cxx
Ну и если говорить о стандарте, то необработанное исключение вызывает именно terminate.
источник

m

magras in pro.cxx
magras
Точного ответа на вопрос я не знаю, но попробуй поставить тот же хендлер еще на terminate (через std::set_terminate). Если я правильно помню, когда я встречался с breakpad под видной он ставил свои хендлеры и на terminate и на что-то системное.
Судя по всему я не прав. Вот три хука, которые ставит breakpad под виндой: https://github.com/google/breakpad/blob/ee6f67d3b0c679d6e3d6c892911d49eafcd9ea8d/src/client/windows/handler/exception_handler.cc#L280-L289
источник

c

call eax in pro.cxx
Отправьте сайт российского комитета C++, спасибо
источник

A

Alex in pro.cxx
Большое спасибо. Не знал о _purecall_handler и _invalid_parameter_handler. Но это не помогает мне понять, почему вот только что в релизе у юзеров ловились исключения в потоках (точнее, не ловились, но вызывался глобальный exception filter, установленный в main()), а на моих двух машинах нет.
Возможно, релиз собран с msvc 2017, а я пробую с 2019, но не могли же MS так внезапно  поменять это поведение?

А этот ExceptionHandler в breakpad нужно инициализировать в каждом потоке, или достаточно один раз при старте приложения?
источник

m

magras in pro.cxx
Alex
Большое спасибо. Не знал о _purecall_handler и _invalid_parameter_handler. Но это не помогает мне понять, почему вот только что в релизе у юзеров ловились исключения в потоках (точнее, не ловились, но вызывался глобальный exception filter, установленный в main()), а на моих двух машинах нет.
Возможно, релиз собран с msvc 2017, а я пробую с 2019, но не могли же MS так внезапно  поменять это поведение?

А этот ExceptionHandler в breakpad нужно инициализировать в каждом потоке, или достаточно один раз при старте приложения?
Я с ним давно работал, поэтому лучше не буду врать и предложу поискать ответ в документации.
источник

IZ

Ilia Zviagin in pro.cxx
Побитый Кирпич
для динамической рефлексии и кодогенерации ещё как нужно
Ещё раз.
Если ты хочешь найти метод по RTTI и вызвать его -- в твоей голове что-то очень сильно не так...
источник

IZ

Ilia Zviagin in pro.cxx
Alex
QML - ненативное исчадие джаваскрипта, что с них взять
+
источник

AS

Anatoly Shirokov in pro.cxx
Ты просто не умеешь в QML, к тому же в Qt6 он будет компилироваться, добавится строгая типизация, а JS станет опциональным
источник

П

Пашечка in pro.cxx
Anatoly Shirokov
Ты просто не умеешь в QML, к тому же в Qt6 он будет компилироваться, добавится строгая типизация, а JS станет опциональным
Qt6 уже релизнулся, и чот пока там не особо оно компилируется (хотя читал по диагонали)
источник

АП

Антон Перстенёв... in pro.cxx
Пашечка
Qt6 уже релизнулся, и чот пока там не особо оно компилируется (хотя читал по диагонали)
хм, а бинари есть?
источник

П

Пашечка in pro.cxx
Антон Перстенёв
хм, а бинари есть?
https://www.qt.io/product/qt6
Вроде что то скачать можно, но я хз, не интересно. Точнее интересно, но мне лично пока негде применять.
источник

A

Alex in pro.cxx
и в онлайн инсталляторе есть, но в самой Qt я годных нововведений не заметил
источник

ПК

Побитый Кирпич... in pro.cxx
Ilia Zviagin
Ещё раз.
Если ты хочешь найти метод по RTTI и вызвать его -- в твоей голове что-то очень сильно не так...
Всему можно найти применение
источник

AS

Anatoly Shirokov in pro.cxx
Пашечка
Qt6 уже релизнулся, и чот пока там не особо оно компилируется (хотя читал по диагонали)
Может не успели, бум подождать
источник