質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

0回答

1119閲覧

VisualStudio2019「デバッグを開始」でのフリーズに対する予防策、対処法

nyamotail

総合スコア6

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2021/08/16 17:25

編集2021/08/17 08:41

VC++でゲーム開発をしています。
基本的には「デバッグなしで開始」を選択して動作確認しているのですが、たまに間違って「デバッグの開始」を選択してしまうとフリーズしてしまいます。OSごとフリーズするのでアプリケーションの強制終了もできず、pcの電源を落とすしかありません。おそらくゲームループ(ShowWindow()でした)によるものだと思います。これを防ぐ方法、あるいはフリーズ時の対処法はありますか?気を付けるしかないのでしょうか。

追記:以下のコードで「デバッグの開始」をすると必ずフリーズします。ShowWindow(hwnd, SW_SHOW);をコメントアウトするとフリーズせず正常にデバッグが開始できました。正常な環境であれば以下のコードでフリーズは起こらないのでしょうか?それとも、そもそもこのコード自体にどこかおかしい点がありますか?

c++

1#include <Windows.h> 2#include <tchar.h> 3 4LRESULT WindowProcedure(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { 5 if (msg == WM_DESTROY) { 6 PostQuitMessage(0); 7 return 0; 8 } 9 return DefWindowProcW(hwnd, msg, wparam, lparam); 10} 11 12int main() 13{ 14 //create window 15 HWND hwnd = nullptr; 16 WNDCLASSEX wc = {}; 17 HINSTANCE hInstance = GetModuleHandle(nullptr); 18 wc.cbSize = sizeof(WNDCLASSEX); 19 wc.lpfnWndProc = (WNDPROC)WindowProcedure; 20 wc.lpszClassName = _T("2Dgame"); 21 wc.hInstance = GetModuleHandle(nullptr); 22 RegisterClassEx(&wc); 23 RECT wrect = { 0,0,1280,720 }; 24 AdjustWindowRect(&wrect, WS_OVERLAPPEDWINDOW, false); 25 hwnd = CreateWindow( 26 wc.lpszClassName, 27 _T("game window"), 28 WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, 29 CW_USEDEFAULT, 30 CW_USEDEFAULT, 31 wrect.right - wrect.left, 32 wrect.bottom - wrect.top, 33 nullptr, 34 nullptr, 35 wc.hInstance, 36 nullptr 37 ); 38 ShowWindow(hwnd, SW_SHOW); 39 40 //loop 41 MSG msg = {}; 42 while (true) 43 { 44 if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { 45 if (msg.message == WM_QUIT) { 46 break; 47 } 48 TranslateMessage(&msg); 49 DispatchMessage(&msg); 50 } 51 else { 52 //game processing 53 } 54 } 55}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/08/17 01:09

まず「Visual Studio デバッグ フリーズ」で検索するとフリーズの原因と対処法が色々みつかるので、それを試してください。 それでも改善しない場合、OS と Visual Studio を再インストールし、同じ問題が再現するかを確認しながら他のアプリや設定を少しずつ戻して原因究明をしてください。 デバッグできない開発環境など効率が悪いにもほどがあります。 それでも改善せず、別の環境を用意することもできない場合、メニューを使うのをやめてキーボードショートカットから開始する癖をつければ間違えないのではないかと思います。 というか、ここで聞くことでしょうか? 一番にサポートに電話するのが良いかもしれません。
fana

2021/08/17 01:23

> おそらくゲームループによるものだと思います Visual Studio 側の問題なのか,自分のプログラム側が何か良くないのか,という切り分けをしてみてはどうでしょうか? てきとーな別のプロジェクトを作ってみても同じことになるなら前者側だと判断,とか.
nyamotail

2021/08/17 08:12

Zuishin様 過去にも何度も調べましたが解決しませんでした。Visual Studioを再インストールしても駄目でした。ショートカットも使いますが、F5に手が当たってフリーズすることもあるので直したいです。OSの再インストールやサポートへの連絡は最終手段にします。。。 fana様 適当なコードを追記しました。このコードでフリーズします。よくあるゲームループだと思うのですがどこか間違っているのでしょうか。
fana

2021/08/17 08:25

たとえそのコードのどこかが間違っていたとして,それによってOSを巻き込んでフリーズというのはそうそう無いだろうと思うので,やはりコードとは関係ないんじゃないでしょうか? (コンソールアプリケーションでmain関数で即returnするだけのコードとかで試せば「コードが間違っているから?」的な懸念も無くなるのでは)
Zuishin

2021/08/17 08:37

ショートカットは再割り当てできるので、デバッグ実行のショートカットを削除し、デバッグなしで実行に F5 を割り当てれば一応望みの動作にはなると思います。 デバッグできない IDE というわけのわからないものになりますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問