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

Как можно обрабатывать краш программы?

17.06.2025, 11:08. Показов 4587. Ответов 45

Студворк — интернет-сервис помощи студентам
Всем привет. Возник такой вопрос, допустим есть программа на c++ для винды, иногда она может крашется ошибка чтения памяти, необработанные исключения, наверное, что то еще может быть. Так вот какие есть практики быстро отлавливать и править такие истории?

1. Можно использовать логи, не всегда помогают
2. Можно использовать дебаггер, для этого нужен дамп памяти с ошибкой
3. Тестирование, ну, это понятно

Используете ли вы общий try catch в main, чтобы отлавливать все исключения и записывать их в логи(файлы, Event Viewer)?
Оправдано ли вообще делать дампы при ошибке на уровне программы?
Что еще посоветовать можете?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.06.2025, 11:08
Ответы с готовыми решениями:

Подскажите как убрать краш программы
Здравствуйте! В общем дана задача: Написть приложение , которое "угадывает"задуманное...

Краш программы
Из за чего крашит мою программу в 1 запросе я ввожу: C:\test.. во 2 запросе я ввожу: ...

QML SetSource() краш программы
Добрый день при запуске программы я запускаю QML с шаблоном login.qml а потом хочу показать...

45
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
09.07.2025, 23:38
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Алексей1153 Посмотреть сообщение
слышал ли что-нибудь про RAII ?
SmallEvil, любит туда послать. На все вопросы там искать...
Я читал, ни чё не понял... RAII лучше ИИ?

Добавлено через 5 минут
Нехрен путать... Головой надо думать, когда код пишешь.
0
10.07.2025, 00:06

Не по теме:

Наталья8, а правда, что твое настоящее имя Андрей?

0
10.07.2025, 01:38

Не по теме:

Ни разу ни где Андреем не назывался...
С чего ты взял?

0
Отпрыск ChatGPT
 Аватар для Azawa
266 / 31 / 4
Регистрация: 18.06.2019
Сообщений: 155
10.07.2025, 05:02
Цитата Сообщение от Алексей1153 Посмотреть сообщение
достаточно стандартного C++
Вопрос целесообразно ли? Готовы заниматься не приложением, а писать RAII обёртку под каждый тип объекта WinAPI по требованию? А WinAPI это Си интерфейс. По сути, переизобретая уже существующие фреймворки заново:
...
3. WTL (Windows Template Library)
4. Win32++
5. libffc (Free Foundation Classes)
6. boost.nana

Или не морочить голову и писать как в Си. Может оно и не нужно.
0
фрилансер
 Аватар для Алексей1153
6505 / 5750 / 1134
Регистрация: 11.10.2019
Сообщений: 15,399
10.07.2025, 06:20
Цитата Сообщение от Наталья8 Посмотреть сообщение
RAII лучше ИИ?
намного лучше

Цитата Сообщение от Azawa Посмотреть сообщение
Готовы заниматься не приложением, а писать RAII обёртку под каждый тип объекта WinAPI по требованию
речь не про меня. Это обязательно нужно делать, иначе будет беда.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
10.07.2025, 19:18
Цитата Сообщение от Verevkin Посмотреть сообщение
Если обобщённо – в те места, где возможно недопустимое значение переменной и/или входного параметра функции.
Это синдром тотального недоверия..
Недоверие снижает скорость работы функций.
Функция не должна проверять все свои параметры.
Она должна доверять тем функциям, которые ответственны за передачу параметров.
Проверку своих параметров функция должна осуществлять только если параметры приходят из недоверенного источника.. Например ввод пользователем каких то данных. Этим данным доверять нельзя, значит их необходимо валидировать. А вставлять проверки на авось, это признак плохого тона.
Более того, возвращаемое значение функции должно быть доверенным, единственным, или функция ничего не возвращает, а обрабатывает ошибку где-то в своих недрах. Это конечно спорно, но я считаю, что код построенный на недоверии это плохой код..
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,898
10.07.2025, 19:37
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Это синдром тотального недоверия..
Недоверие снижает скорость работы функций.
Функция не должна проверять все свои параметры.
Она должна доверять тем функциям, которые ответственны за передачу параметров.
Поучи жену щи варить.
Кликните здесь для просмотра всего текста



Срабатывание ассёрта означает, что это именно я накосячил, и просто сокращает почти до нуля время поиска ошибки доступа к памяти а-ля Access violation.
Delphi
1
2
3
4
5
6
7
8
9
function ExtractLast4Bytes(const buf; const ACount: int32): DWORD;
var
  ptr: pByte;
begin
  // копирование последних 4 байт куска памяти как DWORD
  Assert(ACount > 3);
  ptr:= @buf;
  move(ptr[ACount - 4], result, sizeof(result));
end;
Я свои методы никому не навязываю. А про быстродействие - это ты зря. Я пишу софт, который передаёт/принимает/обрабатывает данные по всяким интерфейсам. Так вот, передача данных - это 99,999% времени работы программы вне простоя, что позволяет просто пренебречь временем, которое требуется на выполнение проверок по assert(). Всё проверить и учесть невозможно, поэтому, если в процессе работы у какого-то юзера вылезает краш по ассёрту (с указанием имени модуля и номера строки в нём), я считаю это огромной удачей. Но это бывает крайне редко, т.к. львиная доля косяков выявляется ещё на комплексной отладке.
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
10.07.2025, 19:59
Цитата Сообщение от Verevkin Посмотреть сообщение
Срабатывание ассёрта означает, что это именно я накосячил
А в коде не должно быть никаких "Я".
Цитата Сообщение от Verevkin Посмотреть сообщение
поэтому, если в процессе работы у какого-то юзера вылезает краш по ассёрту (с указанием имени модуля и номера строки в нём), я считаю это огромной удачей.
Вообще-то это не удача, а косяк программиста.
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,898
10.07.2025, 20:06
Цитата Сообщение от CoderHuligan Посмотреть сообщение
А в коде не должно быть никаких "Я".
Это мой код и именно я несу за него ответственность. Мне за это платят неплохие деньги.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Вообще-то это не удача, а косяк программиста.
Выявление бага - это удача. Программ без багов не бывает, патамушта человеческий фактор. Возможно, ты этого не понимаешь, но это понимает моё начальство. Этого мне достаточно.
0
10.07.2025, 20:35

Не по теме:

Какой угарный топик :bravo:

0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
10.07.2025, 22:45
Verevkin,

Не по теме:

Дай бог.... На таких как ты, всё держиться... Со времён Владимира Ильича.
Америкосы ещё... Но про них давай не будем...



Добавлено через 1 минуту
SmallEvil,

Не по теме:

И вы уважаемый от куда то. Ну привет...



Добавлено через 5 минут

Не по теме:

Крякнул у меня бильдер.. Переустанавливать надо.
Места нету. XE3 - гавно. Берлин, или Токио.
В чём выразилось крякнул?
Не с того ни с сего мессагами начал бросаться.
На ровном месте.... Не обоснованно.
Да у него прикол ещё... Выходить из системы надо, что бы остановить безобразие.



Добавлено через 3 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
А про быстродействие - это ты зря
Бильдер это вообще... Штука не очень быстрая. Глючная, это да...

Добавлено через 8 минут
Цитата Сообщение от Verevkin Посмотреть сообщение
Функция не должна проверять все свои параметры.
Она должна доверять тем функциям
Я тоже вот как то так... Полон компьютер программ нафигачил...
Работают...
Я тоже не проверяю...
У меня и графика и видео самописное.
И звук....

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Проверить стримы (Видео выше)
// ===================================
bool first_stream_is_video(char * in_File) {
    AVFormatContext *pFormatCtx = NULL;
    if (avformat_open_input(&pFormatCtx, in_File, NULL, NULL) != 0)//<<<---------------- Исходный файл
        return -1; // Couldn't open file
                   // Retrieve stream information
    if (avformat_find_stream_info(pFormatCtx, NULL) < 0)
        return -1; // Couldn't find stream information
int ret = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);
    //AVERROR_STREAM_NOT_FOUND   
    if (ret < 0) {
        printf("\n Could not find AUDIO stream in input file \n");// Не нашёл поток
    }//                  здесь... если нет потока, возвращает отрицат
int ret1 = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
    //AVERROR_STREAM_NOT_FOUND   
    if (ret1 < 0) {
        printf("\n Could not find VIDEO stream in input file \n");// Не нашёл поток
    }//                  здесь... если нет потока, возвращает отрицат... (Хуй какое число)
    //avformat_close_input(&pFormatCtx);// закрыть входной формат контекст
    if (pFormatCtx->nb_streams == 1 && ret < 0)return true;// ОДНО ВИДЕО
    else return ((ret1 < ret) && (ret1 >= 0) && (ret >= 0));//Видео выше аудио
}
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (first_stream_is_video(in_File)// === Разрешение открыть мессагу (Видео выше аудио)
    && memcmp(ext, "avi", 3) == 0 || memcmp(ext, "AVI", 3) == 0 ) {
            
        do {
                bool permission{ true };
                for (short i = 0; i < strlen(float_num); ++i)
if ((unsigned)float_num[i] < 46
    || (unsigned)float_num[i] > 57
    || (unsigned)float_num[i] == 47)
                        permission = false;
    if (permission && strlen(float_num) != 0) {
    double frame_per_s = std::stod(&float_num[0], NULL);
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,898
10.07.2025, 22:48
Цитата Сообщение от Наталья8 Посмотреть сообщение
Дай бог.... На таких как ты, всё держиться... Со времён Владимира Ильича.
-тся.
Цитата Сообщение от Наталья8 Посмотреть сообщение
Бильдер это вообще... Штука не очень быстрая. Глючная, это да...
Зачем ты им пользуешься тогда? Ты извращенец-чикатила?
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
10.07.2025, 22:54
Не пользуюсь... В коридоре стоит...
Пара програмок написанная на бильдере у меня. Я ими пользуюсь.
Прошлый раз решил подправить немного увеличить костанту.
Понёс в коридор... А он мне хренак - мессага. Ещё и ещё.

Програмка показывает графику..
Увеличивает картинку до четырёх экранов. Форму увеличивает.
Я увеличить до шести экранов....
Карту смотреть.
А бильдер работать перестал....
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,898
10.07.2025, 22:57
Цитата Сообщение от Наталья8 Посмотреть сообщение
Понёс в коридор... А он мне хренак - мессага. Ещё и ещё.
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
10.07.2025, 23:06
Код старый.... Я так давно уже не пишу...

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
31
32
33
34
35
36
37
38
39
40
//---------------------------КОЛЁСА мыши---(увеличение)-----////////////////////
void __fastcall TForm1::FormMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos,
          bool &Handled)
{ if(PicProp_H==0 && PicProp_W==0)return;// Запрет колёс (Режим ножницы)
  if(Form_ind){delete Form_ind; Form_ind=NULL;}// переписать
                                  Timer4->Enabled=true; // индикатор
if(PicProp_H * PicProp_W < (Screen->Height*Screen->Width)*4){//< -----Ограничение на увеличение
     Form1->Height=floor(PicProp_H *= KFn);
      if(!up_down)Form1->Width=floor(PicProp_W *= KFn);
                      }
                 if(!protect) { //< ------------------- Разрешение рисовать на канву формат
  if(Form1->Height * Form1->Width  > Screen->Height * Screen->Width && chang) {
      pict_change(z_bmp);// < --- Создаём Image и на него рисунок (выполняеться один раз)
   chang= false; }
 if(!img)in_Canvas();
    }
if(img){img->Width= Form1->Width; img->Height= Form1->Height;}
    no_exit = false;// Не терминировать программу (крутил колёса)
              }
 
 
//----------------------------КОЛЁСА мыши--- (уменьшение) //////////////////////
void __fastcall TForm1::FormMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos,
          bool &Handled)
{ if(PicProp_H==0 && PicProp_W==0)return;// Запрет колёс(Режим ножницы)
 if(Form_ind){delete Form_ind; Form_ind=NULL;} // переписать
                                  Timer4->Enabled=true; // индикатор
if( PicProp_H * PicProp_W > 520.0 ) { // < --- Ограничение на уменьшение (по площади)
       Form1->Height=floor(PicProp_H/=KFn);
       if(!up_down)Form1->Width=floor(PicProp_W/=KFn);
                      } //---floor() функция округления до меньшего
                if(!protect) { //< ------------------- Разрешение рисовать на канву формат
  if(Form1->Height * Form1->Width  < Screen->Height * Screen->Width && !chang){ //  && !chang
delete img; img=NULL; Form1->Timer3->Enabled=true;// <--- (Первая прописка) рисунок на канву (Один раз)
    chang= true;}
      if(!img)in_Canvas();// <--- рисунок на канву(постоянно если формат разрешён)
       }
  if(img){img->Width= Form1->Width; img->Height= Form1->Height;}
  no_exit = false;// Не терминировать программу (крутил колёса)
       }
Добавлено через 1 минуту
Цитата Сообщение от Verevkin Посмотреть сообщение
А он мне хренак - мессага
Мессага по созданию папки... Раньше создавало....
Не имеет отношения... Перестал он компилировать эту программу....
Она пять лет лежит. Я её не трогал....

Добавлено через 5 минут
Кстати. Тащу форму выше экрана....
Давно придумал. Сейчас трудно найти в этой куче...

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{   // Включение прозрачности формы, привязка лейбла к нулю формы и удаление лейбла, если прозрачность
 upperScr=Form1->Top;//<--запомнить...форма выше верха
              if(protect){// Не для всех форматов прозрачность (для тех что на канву запрет)
if (KEYDOWN(VK_CONTROL)&& !Form1->TransparentColor){Form1->TransparentColor=true;Sleep(150);}
if (KEYDOWN(VK_CONTROL)&& Form1->TransparentColor){Form1->TransparentColor=false;Sleep(150);}
                         }
 static int old_x(Form1->Left), old_y(Form1->Top);
     //------------------- При сдвиге формы , индикатор
        if(Form1->Left!= old_x || Form1->Top !=old_y  ){
     if(Form_ind){delete Form_ind; Form_ind=NULL;}// переписать
                                  Timer4->Enabled=true; } // индикатор
                   if(Form_ind){
         if(Form1->Left < 0)Form_ind->Left=0;
             else Form_ind->Left= Form1->Left;
             //----------------
        if(Form1->Top < 0) Form_ind->Top=0;
            else Form_ind->Top= Form1->Top;
            //-----------------
        if(Form1->TransparentColor){delete Form_ind; Form_ind=NULL;}
                       }
         old_x =Form1->Left;  old_y =Form1->Top;
                        }
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
10.07.2025, 23:11
final_file (3).mp4
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
11.07.2025, 18:43
Конечно согласен - гавнокод...
Весь бильдер - гавнокод..
Функции бильдера, которые на String (UTF8)...
и в перемешку WinApi функции на wchar_t(В котором хрен чего).
Оно работает, через жопу, а потом вдруг с какого то перепугу перестаёт....
Писал бы я на стандартном... Конечно гавнокода бы не было...


C++
1
2
3
4
SYSTEMTIME st;  //                     Подготовка путю и сохранение картинки в   ПАПКУ с датой    (ВЫРЕЗАНИЕ из screen)
    GetSystemTime(&st);
    folder_name = String(st.wDay) + "." + String(st.wMonth) + "." + String(st.wYear); // Имя папки в wchar_t
//---------------
C++
1
2
3
4
5
6
7
8
BOOL create_fld(wchar_t* cmdline)
{
CreateDirectoryW(cmdline, NULL); // создаём папку (если сегодняшней нет)
wchar_t prin_t[63];
wsprintf(prin_t, L"%s%s",L"Создал папку с именем: ", wcsrchr(cmdline, '\\')+1);
 return MessageBoxW(NULL, prin_t, L"Warning", MB_OK | MB_ICONWARNING | MB_SETFOREGROUND | MB_SYSTEMMODAL);
}
//---------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
wchar_t cmdline[MAX_PATH] = {};
        GetModuleFileName(GetModuleHandle(NULL), cmdline, MAX_PATH);
   *(wcsrchr(cmdline, L'\\')+1) = '\0'; // ====== ноль вместо последнего слеша;
    wcscat(cmdline, folder_name.c_str());// --- Закончим путь в wchar_t
 
if (_waccess(cmdline, 0) != 0){
        
create_fld(cmdline);
 
    }//         А если есть, то ху в неё.
 
       String Name=ExtractFilePath(Application->ExeName)+folder_name+"\\NewPicture";//<== путь в каталог экзешника
int number=1;
while (FileExists(Name+IntToStr(number)+".png"))
{
number++;
}
Png->SaveToFile(Name+IntToStr(number)+".png");//<== и создаём файл .JPG
  delete Png;// JPN=NULL;
                          }//--создать не нулевой .JPG
DrawSelectRegion = false;
}
//--------------------------
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
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y) {
if(one && open_folder) {
    static wchar_t cmdline[MAX_PATH] = {};
        GetModuleFileName(GetModuleHandle(NULL), cmdline, MAX_PATH);
   *(wcsrchr(cmdline, L'\\')+1) = '\0'; // ====== ноль вместо последнего слеша;
    wcscat(cmdline, folder_name.c_str());// --- Закончим путь в wchar_t
 
  //---------------------------- Хитрым способом открыть папку и выделить последний полученный файл
     
if (_waccess(cmdline, 0) != 0)
    {
create_fld(cmdline);
    }
   else {
     //String rtg = String(wcslen(cmdline));
//MessageBoxW(Handle, cmdline, L"Warning", MB_OK | MB_ICONWARNING | MB_SETFOREGROUND | MB_SYSTEMMODAL);
 ShellExecute(Handle, L"open", L"explorer.exe", cmdline, NULL, SW_SHOW);
 //ShellExecute(0,0,Application->ExeName.c_str(),0,0,SW_SHOW); //Запускаем новую копию
  //Application->Terminate();
        }
  one=false;
   }
  //---------
}
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,898
11.07.2025, 18:45
Наталья8, хорош флудить.
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
11.07.2025, 18:59
Аккес виолятион 000000;
Больше не буду.. Простите засранца...
Валялся где то Берлин... Надо ставить.
Он написано ещё с++11 поддерживает.

Добавлено через 2 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
хорош флудить
А чё в натуре??? Я про краш и пишу...
Модераторы есть... Пусть удаляют...
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,357
11.07.2025, 19:06
Токио...
Миниатюры
Как можно обрабатывать краш программы?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.07.2025, 19:06

QtableView получение количества строк (краш программы)
Здравствуйте, подскажите, пожалуйста, как обойти траблу. Я делаю печать из таблицы, все работает,...

Краш программы после вызова Inverse_element
#include&lt;iostream&gt; #include&lt;math.h&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std;...

Краш программы
Господа, Добрый день! может быть кто-нибудь знает, где искать ошибку? Никакой код не исполняется,...

Краш программы. Поиск по структуре
Доброго времени суток, уважаемые форумчане! Я столкнулся с такой проблемой... Условие задачи : ...

Краш программы с STATUS_STACK_BUFFER_OVERRUN
Привет всем! Делаю программу, основанную на рекурсивном поиске файлов, и всё работает отлично,...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru