デバッグ– category –
-
デバッグ
【MFC/C++】Assertion failed!の読み方:assert()とDebug Assertion Failed!の見分け方
Visual Studioで作ったアプリを動かしていると、「Microsoft Visual C++ Runtime Library」という題名で「Assertion failed!」と書かれたダイアログが出ることがあります。これはC/C++標準のassert()の条件が成り立たなかったときにCランタイムが出すもの... -
デバッグ
【MFC】二重起動防止:CreateMutexをGetLastError 183で判定
MFCアプリで二重起動防止をするときは、InitInstanceで名前付きミューテックスをCreateMutexで作り、直後のGetLastError()が183(ERROR_ALREADY_EXISTS)かどうかで、同じアプリがすでに動いているかを判断します。同じ名前のミューテックスがすでにあって... -
デバッグ
【MFC】GetLastError 32「別のプロセスが使用中」:直す共有モードと使用中プロセスの調べ方
CreateFileWやDeleteFileWが失敗して、GetLastError() が32、つまりERROR_SHARING_VIOLATIONを返したときは、同じファイルをほかのハンドルが開いていて、その共有モードと今回の指定がかみ合っていません。メッセージは「別のプロセスが使用中です」です... -
デバッグ
【MFC】0xC0000005 アクセス違反の原因を特定する手順:read/writeとアドレス値から絞り込む
Visual Studioでデバッグ実行していたMFCアプリが止まり、出力ウィンドウに0xC0000005という数字だけが残る。よくある現象ですよね。原因はこの1行から絞れます。その行に出る読み取り中か書き込み中かと、直前のアドレス値の2つを最初に読めば、NULLポイ... -
デバッグ
【MFC】GetLastError 3「指定されたパスが見つかりません」:コード2との違いと確認順
CreateFileWの直後にGetLastError() を読み、3が返ってきた。そんなときにまず疑うのは、末尾のファイル名ではなく、その手前のディレクトリです。3はERROR_PATH_NOT_FOUND。似たエラーである2(ERROR_FILE_NOT_FOUND)との違いを、実際の戻り値を見ながら... -
デバッグ
【MFC】GetLastErrorの数値をFormatMessageで文章にする:メッセージが空になる原因
GetLastError() が返した数値を人が読める文章にするのはFormatMessageです。ところが同じコードで、エラー2なら「指定されたファイルが見つかりません。」が返るのに、エラー193では戻り値が0になって何も入らない。原因はロケールでも権限でもなく、193... -
デバッグ
【MFC】_CrtCheckMemoryでメモリ破壊の発生区間を挟み込む
MFCアプリが、メモリを書き壊した場所では止まらず、後のnewやdeleteで落ちることがあります。最初に置くのは、疑わしい処理の前後にある2つの_CrtCheckMemoryです。前がTRUE、後がFALSEなら、調べる範囲はその間に限れます。 最初に置く2つのチェックポイ... -
デバッグ
【MFC】CreateFileがGetLastError 5(ERROR_ACCESS_DENIED)で失敗するときの確認箇所
CreateFileが失敗してGetLastError() が5(ERROR_ACCESS_DENIED)を返すと、とりあえず管理者として実行して通るかを試したくなりますが、管理者で開けても、標準ユーザーで起動すればまた5になります。先に、書き込み先がProgram Filesのような保護された... -
デバッグ
【MFC】GetLastError 6(ERROR_INVALID_HANDLE):無効なハンドルの原因と切り分け
ワーカースレッドの停止用に作ったイベントを、スレッドがまだ使っている間にダイアログ側でCloseHandleしてしまう。その後でSetEventを呼ぶと戻り値は0、GetLastError()は6、つまりERROR_INVALID_HANDLEです。この記事では、閉じたハンドルを使い回したこ... -
デバッグ
【MFC】WinHTTPのHTTPS接続失敗をTLS 1.2で切り分ける
MFCアプリからHTTPSへ接続できないとき、エラーコードだけでTLSバージョン不一致とは断定できません。この記事では、WinHTTPでTLS 1.2を明示して接続を試し、DNS、プロキシ、証明書、Schannelのどこで失敗したかを切り分けます。 最初に見るエラーと確認先...