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

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

24.04.2025, 08:41. Показов 22730. Ответов 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,026
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
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
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
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
27.04.2025, 03:58
Цитата Сообщение от Zerg1 Посмотреть сообщение
Или мы опять о разном говорим, я не понимаю.
Вижу, дела плохи.
Ладно, попробую намекнуть немного жырнее:

1
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
27.04.2025, 15:16  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
ижу, дела плохи.
Ладно, попробую намекнуть немного жырнее:
а чо, так можна было?!
спасибо, возьму на вооружение, хотя и не для этого случая.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
27.04.2025, 15:58
Цитата Сообщение от Zerg1 Посмотреть сообщение
а чо, так можна было?!
0
2 / 2 / 0
Регистрация: 04.05.2010
Сообщений: 93
27.04.2025, 22:01  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Например CppCheck.
Но если честно, я им не пользовался. Может есть что и лучше и поновее.
спасибо, поставил, попробовал, работает, всё просто. узнал о своём творчестве новое
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
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
336 / 340 / 55
Регистрация: 23.09.2014
Сообщений: 1,044
30.04.2025, 00:52
Цитата Сообщение от Zerg1 Посмотреть сообщение
Если бы он просто молча выходил в ОС, или как-то гуманно завершался, то нет проблем.
Устанавливаете собственный обработчик исключений через SetUnhandledExceptionFilter, в котором тихо прибиваете приложение.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6289 / 3013 / 1051
Регистрация: 01.06.2021
Сообщений: 11,404
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
Ответ Создать тему
Новые блоги и статьи
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru