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

デバッグコードが再入可能ではない #299

Closed
m-tmatma opened this issue Jul 24, 2018 · 5 comments
Closed

デバッグコードが再入可能ではない #299

m-tmatma opened this issue Jul 24, 2018 · 5 comments
Labels
🐛bug🦋 ■バグ修正(Something isn't working)
Milestone

Comments

@m-tmatma
Copy link
Member

デバッグコードが再入可能ではない

static な一時バッファを使っている。

void debug_output(const char* str, ...)
{
static 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);
}

#265 (comment)

@m-tmatma m-tmatma added the 🐛bug🦋 ■バグ修正(Something isn't working) label Jul 24, 2018
@berryzplus
Copy link
Contributor

微妙なんすけど、この関数は汎用品じゃないので現状通りで問題ない認識です。

この関数を利用している箇所は2箇所あります。

  1. 独自実装版 assert 関数の assertion failed 実装
  2. 独自関数 assert_warning 関数( 停止しない assert )の assertion warning 実装

再入が問題になるのは、マルチスレッド環境で複数スレッドから関数を実行する場合です。
古典的な再入の定義は「割り込み」に絡んだ説明になりますが、
windowsでは割り込みはスレッド処理されるので、常にマルチスレッドの話になります。
(これはC言語コードであっても同様だったはず・・・。)

この関数の用途はデバッグ用に異常事態を検知することですが、
複数スレッドで同時に異常事態が発生するほど酷いコードなんでしたっけ?

実害はなさそうなんで、コーヒーブレイクネタかな、と思っています。

@m-tmatma
Copy link
Member Author

直すのに手間かからないので直したらいいと思います。
使用するメモリは少ないので、単にローカル変数で定義すればいいです。

@berryzplus
Copy link
Contributor

極論static外すだけ?

@m-tmatma
Copy link
Member Author

そうです

@m-tmatma
Copy link
Member Author

#301 マージした。

@m-tmatma m-tmatma added this to the next release milestone Jul 26, 2018
@ds14050 ds14050 added the 🐛bug🦋 ■バグ修正(Something isn't working) label Sep 18, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛bug🦋 ■バグ修正(Something isn't working)
Projects
None yet
Development

No branches or pull requests

3 participants