Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93

Короткая функция на си/си++, вызывающая в win10 appcrash приложения

24.04.2025, 08:41. Показов 23115. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Короткая функция на си/си++, вызывающая в win10 appcrash приложения. То есть чтобы приложение не тихо выходило в ОС, а появлялось оконце.
Миниатюры
Короткая функция на си/си++, вызывающая в win10 appcrash приложения  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2025, 08:41
Ответы с готовыми решениями:

Класс, созданный в DLL, не хочет удалятся из вызывающего приложения
Привет! Приведу пример проблеммы на тестовом примере. Создаю DLL при помощи визарда: С++...

Как отследить ошибку, вызывающую выгрузку приложения?
Всем здравствуйте. Приложение, работающее с Com-портом, после нескольких суток непрерывной...

Падает то не падает) APPCRASH StackHash PCH FROM ntdll
При работе приложения вызывается метод класса и с вероятностью 50/50 программа доживает до конца...

34
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
25.04.2025, 16:01
Студворк — интернет-сервис помощи студентам
У меня была подобная проблема то ли на XP, то ли на 7, когда я играл в Warcraft3 и ставил две (хоть и одинаковые, но) "паленые" (или несовместимые с "двойным каналом", подробности уже не помню) планки оперативки. Причем ошибка выскакивала в относительно случайные моменты времени (логи вроде не сохранились). Помогал лишь способ оставить одну планку.
В итоге поменял память на нормальную и проблема ушла навсегда (даже с двумя или четырьмя планками).
1
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
25.04.2025, 22:42  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Ну я тя умоляю, ты не айтишник, штоли?
я знаю за ассерты. вопрос-то был в другом. Сервер запускает другой процесс. в маленьком черном окошке, консольном. срабатывает ассерт и окошко схлопывается. и инфа какой ассерт сработал утрачены навеки
Цитата Сообщение от Алексей1153 Посмотреть сообщение
можно наделать вывод в лог/консоль сообщения из некоторых контрольных точек программы. Будет видно, где программа упала в обморок
. попробую временно временно запускать батник с паузой на конце
Цитата Сообщение от drfaust Посмотреть сообщение
Я так понимаю прога 32битная и выполняется в 64битной системе благодаря syswow64
прога да, 32 битная. выполняется на виртуальном выделенном сервере под лицензионной Windows Server 2008. И кстати да, эта херня началась примерно полгода назад +-. Может действительно, какая-то обнова кривая от микроты, а не я баг посадил. Там винда на автомате обновляется.

Добавлено через 1 минуту
Цитата Сообщение от gunslinger Посмотреть сообщение
У меня была подобная проблема
врядли, прога работает на выделенном виртуальном сервере

Добавлено через 3 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
можно наделать вывод в лог/консоль сообщения из некоторых контрольных точек программы. Будет видно, где программа упала в обморок
будешь смеяться, но на моем сервере довольно развитое логирование, пусть и самодельное. спецом посчитал, макрос логирования вызывается всего в проекте 461 раз! не особо пока помогло именно с этим моим багом
Цитата Сообщение от Алексей1153 Посмотреть сообщение
запустить без точек останова в режиме отладки. С некоторой вероятностью отладчик остановится там, где возникает ошибка
там вся движуха при обмене через сокет с клиентами. такое наверное дебажить сложно. Да и может не падать ничего неделю

Добавлено через 11 минут
Цитата Сообщение от SmallEvil Посмотреть сообщение
Например CppCheck.
попробую, спасибо!

Добавлено через 4 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
reg add "HKLM\SOFTWARE\Policies\Microsoft\Window s\Windows Error Reporting" /v "DontShowUI" /t REG_DWORD /d 1 /f
это гениально! спасибо! теперь сервер мой падает тихо и экологично. и пошевелятор без проблем запускает сервак снова. и зачем эти из майкрософт сделали это окно?!

осталось теперь победить саму багу

Добавлено через 2 минуты
И всё-таки ещё вопрос, как можно сохранять инфу о сработавшем ассерте, чтобы она не погибала в схлопывающемся окошке? батник с сервером и паузой после представляется не совсем верным решением. Нужно его срочно перезапускать после падения, а я могу прийти посмотреть на падение вообще через сутки.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
26.04.2025, 02:48
Лучший ответ Сообщение было отмечено Zerg1 как решение

Решение

Цитата Сообщение от Zerg1 Посмотреть сообщение
зачем эти из майкрософт сделали это окно?!
Это интерактивность с пользователем.
Что бы сообщить что есть проблема с компонентой/приложением.

Там где это не нужно, как на сервере, допустим - это отключается.

Цитата Сообщение от Zerg1 Посмотреть сообщение
И всё-таки ещё вопрос, как можно сохранять инфу о сработавшем ассерте, чтобы она не погибала в схлопывающемся окошке? батник с сервером и паузой после представляется не совсем верным решением. Нужно его срочно перезапускать после падения, а я могу прийти посмотреть на падение вообще через сутки.
assert-ы - инструмент проверки для отладки, когда код проходит тестирование.
В релизе их вообще нет и код ведет себя по другому.

Допустим у вас дебаг-версия с ассертами.
Вы можете создать свой макрос над assert, который будет логировать и прерывать работу приложения.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// uncomment to disable assertion
// #define NDEBUG
 
#include <iostream>
#include <cassert>
#include <string>
 
#ifndef NDEBUG
#   define M_Assert(Expr, Msg) \
    __M_Assert(#Expr, Expr, __FILE__, __LINE__, Msg)
#else
#   define M_Assert(Expr, Msg) ;
#endif
 
void __M_Assert(const char* expr_str, bool expr, const char* file, int line, const char* msg)
{
    if (!expr)
    {
        std::cerr << "Assert failed:\t" << msg << "\n"
            << "Expected:\t" << expr_str << "\n"
            << "Source:\t\t" << file << ", line " << line << "\n";
        abort();
    }
}
 
int main(){
    std::string str = "hello";
    std::string::size_type i = 100;
    M_Assert(i < str.size(), "string accept over size");
}
Что у вас там за окошко и как вы с ним взаимодействуете, хз.

Цитата Сообщение от Zerg1 Посмотреть сообщение
И всё-таки ещё вопрос, как можно сохранять инфу о сработавшем ассерте
Windows Batch file
1
server.exe > server.log 2>&1
Если ассерты из STL или другого приложения.
Перенаправить все что будет выводить server.exe в stdout и stderr в файл.
Там и разберетесь.
2
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
26.04.2025, 06:57
Цитата Сообщение от SmallEvil Посмотреть сообщение
Если ассерты из STL или другого приложения.
Перенаправить все что будет выводить server.exe в stdout и stderr в файл.
Только хотел написать - перенаправить stderr в файл. И да assert обычно и номер строки кода указывает.
1
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,891
26.04.2025, 10:13
Цитата Сообщение от Zerg1 Посмотреть сообщение
я знаю за ассерты. вопрос-то был в другом. Сервер запускает другой процесс. в маленьком черном окошке, консольном. срабатывает ассерт и окошко схлопывается. и инфа какой ассерт сработал утрачены навеки
Ты мою картинку не видишь, да?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
26.04.2025, 13:51
Цитата Сообщение от drfaust Посмотреть сообщение
И да assert обычно и номер строки кода указывает.
Обычно? Это слишком сильно сказано.
Например пробовал в MSVC 2022, если перенаправить ассерт в stderr, то пишет инфу просто ассерта, без стектрейс.

Вот такой ассерт я получил от него, при доступе к несуществующему элементу вектора через оператор индексирования...
Code
1
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\vector(1916) : Assertion failed: vector subscript out of range
Это обычное диалоговое окно ассерта по умолчанию в MSVC(скриншот не мой, если что):


Перенаправлял так:
C++
1
2
3
4
5
    if (!IsDebuggerPresent()) // if no using debuger, retagert assertion to "stderr" 
    {
        _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
        _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
    }
Но хотя бы будете знать куда копать
1
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
27.04.2025, 02:46  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
server.exe > server.log 2>&1
спасибо, в логике этих средств в случае родного assert мне подойдёт
Windows Batch file
1
server.exe 2>server.log
так вывод ассерта останется в файле и никуда не потеряется
но я также вдохновился вашим макросом и написал свой в сишном стиле:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef NDEBUG
    #define zassert(Expr) { \
        if(Expr) {} \
        else { \
            char str[2048]; \
            struct tm t; \
            _getsystime(&t); \
            sprintf(str, "\n%02d%02d%02d(%02d:%02d:%02d) Assertion failed: %s, file:%s, line:%d", t.tm_mday, t.tm_mon + 1, (t.tm_year + 1900) % 100, t.tm_hour, t.tm_min, t.tm_sec, #Expr, __FILE__, __LINE__); \
            puts(str); \
            FILE *out = fopen("zassert.log", "at"); \
            if(out != NULL) { \
                fputs(str, out); \
                fclose(out); } \
            abort(); } }
#else
    #define zassert(Expr) ;
#endif
Добавлено через 11 минут
Цитата Сообщение от Verevkin Посмотреть сообщение
Ты мою картинку не видишь, да?
я картинку вижу, я понял, что ассерт выводит имя файла исходника и номер строки в нем. Просто не всегда приложение после своего выхода или падения или ассерта выходит к промпту командной строки где видно вывод предыдущего запуска. Мой сервер запускается командой Shell из VB-приложения. Это означает, что если сервак падает или ассертится, то глазами смотреть вывод негде, окно командной строки где была консоль сервера и всё что там было мгновенно закрывается. Поэтому я написал свою версию ассерта, где он записывается в файл. Или мы опять о разном говорим, я не понимаю.
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,891
27.04.2025, 03:58
Цитата Сообщение от Zerg1 Посмотреть сообщение
Или мы опять о разном говорим, я не понимаю.
Вижу, дела плохи.
Ладно, попробую намекнуть немного жырнее:

1
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
27.04.2025, 15:16  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
ижу, дела плохи.
Ладно, попробую намекнуть немного жырнее:
а чо, так можна было?!
спасибо, возьму на вооружение, хотя и не для этого случая.
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,891
27.04.2025, 15:58
Цитата Сообщение от Zerg1 Посмотреть сообщение
а чо, так можна было?!
0
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
27.04.2025, 22:01  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Например CppCheck.
Но если честно, я им не пользовался. Может есть что и лучше и поновее.
спасибо, поставил, попробовал, работает, всё просто. узнал о своём творчестве новое
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
28.04.2025, 16:47
Цитата Сообщение от Zerg1 Посмотреть сообщение
узнал о своём творчестве новое
Не воспринимайте как "наезд", но если даже cppcheck что-то у вас в коде нашел, то качество кода явно не очень. В среднестатистическом, обычном, коде cppcheck практически ничего не находит, пропуская большинство сложных ошибок.
Так что лишним не будет использовать какие-то более продвинутые анализаторы, из бесплатных это линтер clang-tidy и анализатор clang static analyzer.
1
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
28.04.2025, 20:20  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Не воспринимайте как "наезд", но если даже cppcheck что-то у вас в коде нашел, то качество кода явно не очень.
да без проблем, я совершенствуюсь -- значит существую. в дефолтном режиме был 1 проезд за границы массива на 1 байт, на чтение. на 300+ кил исходников. а вот в режиме "искать всё" было интересно, что он предъявил. я и не обращал внимание на многое раньше. ессно я варнинги компилера не подавляю, а всегда исправляю.
вапще для меня интересная тема, на сам вопрос ответа нет (да уже и не нужно), но по дороге много чего узнал
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
30.04.2025, 00:52
Цитата Сообщение от Zerg1 Посмотреть сообщение
Если бы он просто молча выходил в ОС, или как-то гуманно завершался, то нет проблем.
Устанавливаете собственный обработчик исключений через SetUnhandledExceptionFilter, в котором тихо прибиваете приложение.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6331 / 3063 / 1054
Регистрация: 01.06.2021
Сообщений: 11,705
03.05.2025, 21:28
Цитата Сообщение от SmallEvil Посмотреть сообщение
Но если честно, я им не пользовался.
Я пользовался давно. Скорее, не пользовался, а просто попробовал. Было просто интересно, что за CppCheck фичи в C::B. Поставил эту прогу. Она работает как через собственный гуй, так и можно запустить внутри C::B. Анализатор слабенький, да и каждый раз нужно сохранить код, а потом запустить анализатор. clang-tidy лучше работает, на ходу подсказывает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.05.2025, 21:28

[MySQL] AppCrash при mysql_fetch_row()
Прошу помощи, проблема такова: при инжекте .dll в процесс сам процесс крашится, ни в каком виде не...

Ошибка APPCRASH после запуска программы
помогите исправить проблему в dev++ компилирует без ошибок а при запуске программы выдает это ...

Как правильно создать несколько потоков, вызывающий одну и ту же функцию?
Пробовал так: ... #include &quot;process.h&quot; ... __fastcall TForm1::TForm1(TComponent* Owner) :...

в классе создаётся объект оператором new, как его удалить после использования в основной программе? delete в вызывающей функции не вариант!
Собсно //Это типа служебного класса. (Внимание! В оригинальном коде он вложен в класс xx,...

Передача массива вызывающей функции
Как можно передать массив целиком в вызывающую функцию? И можно ли сделать так: есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru