Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

単体テストで起きたassert失敗を捕捉できるように、コンソールモードではメッセージボックスを表示しないようにしたい #1362

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions sakura_core/debug/Debug1.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@

#pragma once

#include <vadefs.h>

#include <Windows.h>

// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
// メッセージ出力:実装 //
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
Expand Down Expand Up @@ -47,3 +51,10 @@ void DebugOutW( LPCWSTR lpFmt, ...);
#else
#define RELPRINT Do_not_define_USE_RELPRINT
#endif // USE_RELPRINT

//トレース出力(トレース箇所のファイルパスと行番号を出力してエラー解析を容易にする目的)
#ifdef _DEBUG
#define TRACE( format, ... ) DEBUG_TRACE( _T("%hs(%d): ") _T(format) _T("\n"), __FILE__, __LINE__, __VA_ARGS__ )
#else
#define TRACE( ... )
#endif
33 changes: 2 additions & 31 deletions sakura_core/debug/Debug2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,12 @@
#include "StdAfx.h"
#include "debug/Debug2.h"

//2007.08.30 kobake 追加

#ifdef _DEBUG
//!デバッグメッセージ出力
void debug_output(const char* str, ...)
{
char buf[_MAX_PATH+150];
va_list mark;
va_start(mark,str);
// FILE名, LINE 式 分必要
tchar_vsnprintf_s(buf,_countof(buf),str,mark);
va_end(mark);

//デバッガに出力
OutputDebugStringA(buf);
}

//!強制終了
void debug_exit()
{
MessageBox(NULL,L"assertとかに引っ掛かったぽいです",GSTR_APPNAME,MB_OK);
exit(1);
}

void debug_exit2(const char* file, int line, const char* exp)
{
char szBuffer[1024];
wsprintfA(szBuffer, "assert\n%s(%d):\n%s", file, line, exp);
MessageBoxA(NULL, szBuffer , "sakura", MB_OK);
exit(1);
::exit( 1 );
}

void warning_point()
{
int n;
n=0; //※←ここにブレークポイントを設けておくと、任意ワーニングでブレークできる
::DebugBreak();
}
#endif // _DEBUG
19 changes: 11 additions & 8 deletions sakura_core/debug/Debug2.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,29 +27,32 @@
*/
#pragma once

//2007.08.30 kobake 追加
#ifdef assert
#include <cassert>

#include "debug/Debug1.h"
#include "util/MessageBoxF.h"

// C Runtime の定義をundefして独自定義に差し替える
#undef assert
#endif

#ifdef _DEBUG
void debug_output(const char* str, ...);

void debug_exit();
void debug_exit2(const char* file, int line, const char* exp);
void warning_point();

#define assert(exp) \
{ \
if(!(exp)){ \
debug_output("!assert: %hs(%d): %hs\n", __FILE__, __LINE__, #exp); \
debug_exit2(__FILE__, __LINE__, #exp); \
TRACE( "!assert: " #exp, NULL ); \
ErrorMessage( NULL, L"!assert\n%hs(%d):\n%hs", __FILE__, __LINE__, #exp ); \
debug_exit(); \
} \
}

#define assert_warning(exp) \
{ \
if(!(exp)){ \
debug_output("!warning: %hs(%d): %hs\n", __FILE__, __LINE__, #exp); \
TRACE( "!warning: " #exp, NULL ); \
warning_point(); \
} \
}
Expand Down
14 changes: 14 additions & 0 deletions sakura_core/util/MessageBoxF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,20 @@ int Wrap_MessageBox(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
// 選択中の言語IDを取得する
LANGID wLangId = CSelectLang::getDefaultLangId();

// 標準エラー出力を取得する
HANDLE hStdErr = ::GetStdHandle( STD_ERROR_HANDLE );
if( hStdErr ){
// lpTextの文字列長を求める
DWORD dwTextLen = lpText ? ::wcslen( lpText ) : 0;

// lpText を標準エラー出力に書き出す
DWORD dwWritten = 0;
::WriteConsoleW( hStdErr, lpText, dwTextLen, &dwWritten, NULL );

// いい加減な戻り値を返す。(返り値0は未定義なので本来返らない値を返している)
return 0;
}

// lpText, lpCaption をローカルバッファにコピーして MessageBox API を呼び出す
// ※ 使い回しのバッファが使用されていてそれが裏で書き換えられた場合でも
// メッセージボックス上の Ctrl+C が文字化けしないように
Expand Down