Инструкция точки останова оператор debugbreak или аналогичный вызов выполнена

I have an infinite loop that breaks if user exits out of the main window. I have the following code running in the loop:

unsigned int* renderableShapeIndices = new unsigned int[aNumberCreatedAtRuntime];
// Do something
delete[] renderableShapeIndices;

Then the following happens a couple of loop iterations and cease to happen after the first iteration:

1st breakpoint:
A breakpoint instruction (__debugbreak() statement or a similar call) was executed in Main.exe.

2nd breakpoint:
Unhandled exception at 0x00007FF8C3B8C729 (ntdll.dll) in InTimeEngine2D.exe: 0xC0000374: A heap has been corrupted (parameters: 0x00007FF8C3BF7780).

Has anyone else gone through similar issues? I have no idea what is going on.

Another interesting factor about this is that it only happens in debug mode. It does not happen in release mode.

asked Jun 17, 2022 at 4:39

Christopher Barrios Agosto's user avatar

6

The answer to the problem is in the comment section of the question.

Apparently, if one attempts to write to an array outside of its bounds, it will, but it ends up overwriting data of other places in the code, causing bugs in other parts of the program, even if these two parts of the program are unrelated. In my case, they were completely unrelated.

answered Jun 17, 2022 at 5:28

Christopher Barrios Agosto's user avatar

4

Egefix

12 / 10 / 2

Регистрация: 24.05.2022

Сообщений: 115

1

03.06.2022, 01:52. Показов 5650. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

во время выполнения происходит это:

Critical error detected c0000374
Инструкция точки останова (оператор __debugbreak() или аналогичный вызов) выполнена в ConsoleApplication4.exe.

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
    int g_folder[2]{-1, 0};
    int x[2];
    
    
        std::cout << "Введите количество дисков : ";
        std::cin >> x[0];
       
 
        std::cout << "Введите количество файлов : ";
        std::cin >> x[1];
     
    int* g_volumeFile;
    int* g_volumedDisk;
    g_volumeFile = new int[x[0]];
    g_volumedDisk = new int[x[1]];
    
    
    for (int i = 0; i < x[0]; ++i)
    {
        std::cout << "введите обьем диска  " << i + 1 << " = ";
        std::cin >> g_volumedDisk[i];
        
    }
 
    for (int i = 0; i < x[1]; ++i)
    {
        std::cout << "введите обьем файла  " << i + 1 << " = ";
        std::cin >> g_volumeFile[i];
        
    }

Название: план.jpg
Просмотров: 244

Размер: 46.0 Кб

Critical error detected c0000374



0



Egefix

12 / 10 / 2

Регистрация: 24.05.2022

Сообщений: 115

03.06.2022, 01:56

 [ТС]

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
24
25
26
27
28
29
30
    int g_folder[2]{-1, 0};
    int x[2];
    
    
        std::cout << "Введите количество дисков : ";
        std::cin >> x[0];
       
 
        std::cout << "Введите количество файлов : ";
        std::cin >> x[1];
     
    int* g_volumeFile;
    int* g_volumedDisk;
    g_volumeFile = new int[x[0]];
    g_volumedDisk = new int[x[1]];
    
    
    for (int i = 0; i < x[0]; ++i)
    {
        std::cout << "введите обьем диска  " << i + 1 << " = ";
        std::cin >> g_volumedDisk[i];
        
    }
 
    for (int i = 0; i < x[1]; ++i)
    {
        std::cout << "введите обьем файла  " << i + 1 << " = ";
        std::cin >> g_volumeFile[i];
        
    }

Добавлено через 3 минуты
Необработанное исключение по адресу 0x00007FFB887EF249 (ntdll.dll) в ConsoleApplication4.exe: 0xC0000374: Куча была повреждена (параметры: 0x00007FFB888577F0).

Добавлено через 30 секунд
как это исправить то?



0



Эксперт .NET

6314 / 3933 / 1577

Регистрация: 09.05.2015

Сообщений: 9,235

03.06.2022, 02:09

3

У вас в перепутаны длины массивов…



1



У меня есть бесконечный цикл, который прерывается, если пользователь выходит из главного окна. У меня в цикле работает следующий код:

unsigned int* renderableShapeIndices = new unsigned int[aNumberCreatedAtRuntime];
// Do something
delete[] renderableShapeIndices;

Затем происходит следующее через пару итераций цикла и перестает происходить после первой итерации:

1st breakpoint:
A breakpoint instruction (__debugbreak() statement or a similar call) was executed in Main.exe.

2nd breakpoint:
Unhandled exception at 0x00007FF8C3B8C729 (ntdll.dll) in InTimeEngine2D.exe: 0xC0000374: A heap has been corrupted (parameters: 0x00007FF8C3BF7780).

Кто-нибудь еще сталкивался с подобными проблемами? Я понятия не имею, что происходит.

Еще одним интересным фактором является то, что это происходит только в режиме отладки. Это не происходит в режиме выпуска.

1 ответ

Лучший ответ

Ответ на проблему находится в разделе комментариев вопроса.

По-видимому, если кто-то попытается записать в массив за пределами его границ, это произойдет, но в конечном итоге это приведет к перезаписи данных в других местах кода, что вызовет ошибки в других частях программы, даже если эти две части программы не связаны. . В моем случае они были совершенно не связаны.


0

Christopher Barrios Agosto
17 Июн 2022 в 08:28

Результат будет выглядеть примерно так (главное — видны пути к файлам и видны значения параметров)

ole32.dll!OleUninitialize()Строка 557
	в comole32ole232baseole2.cpp(557)
mir_core.mir!LeaveMessageLoop()Строка 362
	в w:miranda-buildsrcmir_coresrcwindowsmiranda.cpp(362)
mir_app.mir!mir_main(wchar_t * cmdLine)Строка 226
	в w:miranda-buildsrcmir_appsrcmiranda.cpp(226)
Miranda64.exe!wWinMain(HINSTANCE__ * __formal=0x0000000000000001, HINSTANCE__ * __formal=0x000000000014fe70, wchar_t * cmdLine=0x00000000005e6d3c, int __formal=96)Строка 62
	в w:miranda-buildsrcmiranda32srcmiranda.cpp(62)
[Внешний код]

В приложении, использующем OpenTK, при включении встроенной отладки и нажатии F12 отладчик ломается:

Инструкция точки останова (оператор __debugbreak() или аналогичный вызов) была выполнена в …

Стек вызовов не очень помогает определить причину:

      ntdll.dll!DbgBreakPoint()
ntdll.dll!DbgUiRemoteBreakin()
kernel32.dll!BaseThreadInitThunk()
ntdll.dll!RtlUserThreadStart()

Сначала я подумал, что это связано с AeDebug, однако это не так:

  • изменение Auto ничего не дает
  • изменение UserDebuggerHotKey ничего не делает
  • изменение отладчика ничего не дает
  • перезагрузка компьютера, сброс параметров Visual Studio ничего не делает

Простейшее приложение , где это происходит :

      using OpenTK.Graphics.OpenGL;
using OpenTK.Mathematics;
using OpenTK.Windowing.Common;
using OpenTK.Windowing.Desktop;
using OpenTK.Windowing.GraphicsLibraryFramework;

using var window = new MyGameWindow(GameWindowSettings.Default, NativeWindowSettings.Default);
window.Run();

public class MyGameWindow : GameWindow {
    public MyGameWindow(GameWindowSettings gameWindowSettings, NativeWindowSettings nativeWindowSettings)
        : base(gameWindowSettings, nativeWindowSettings) { }

    private double TotalTime { get; set; }

    protected override void OnUpdateFrame(FrameEventArgs args) {
        TotalTime += args.Time;
        
        if (KeyboardState[Keys.F12])
            TotalTime = 0;
    }

    protected override void OnRenderFrame(FrameEventArgs args) {
        GL.Clear(ClearBufferMask.ColorBufferBit);
        GL.ClearColor(Color4.FromHsv(new Vector4((float)TotalTime % 10f / 10f, 1.0f, 0.5f, 1.0f)));
        SwapBuffers();
    }

    protected override void OnResize(ResizeEventArgs e) {
        base.OnResize(e);
        GL.Viewport(0, 0, e.Width, e.Height);
    }
}

запускSettings.json:

      {
  "profiles": {
    "DebugBreakF12": {
      "commandName": "Project",
      "nativeDebugging": true
    }
  }
}

Вопрос:

Как можно отключить__debugbreakповедение при нажатии клавиши F12?

Или я должен просто забыть использовать клавишу F12, когда включена собственная отладка?

Понравилась статья? Поделить с друзьями:
  • Руководство по ремонту ваз калина 1118
  • Сок алоэ для наружного применения инструкция
  • Car wireless music receiver hands free инструкция по применению
  • Беродуал спрей инструкция по применению для детей
  • Мануал по сайтам знакомств