sakura
sakura copied to clipboard
クラッシュダンプの出力ファイル名がおかしい
クラッシュダンプの出力ファイル名がおかしいです。
https://github.com/sakura-editor/sakura/blob/1ff0b488e5f11a074127447d4c587d7d914afda6/sakura_core/_main/CProcess.cpp#L126-L128
#1735 の指摘で気付いたんですけど _APP_NAME(_T) には「sakura(デバッグ版)」のような文字列が入ります。
コードに付けられたコメントと一致しないので、コメントかコードかを修正する必要があります。
「sakura(デバッグ版)」になるのは、_GSTR_APPNAME_ですね。
_APP_NAME(_T) は _T("sakura") で固定でデバッグ版でも同じです。
ただし、 2018年12月 ad01d9dc 「fixes #709: GSTR_APPNAME の実体をグローバル変数に変える」 でマクロ定義が
sakura_core/config/app_constants.h から sakura_core_main\WinMain.cpp に移動しており、これ以降_APP_NAMEマクロがCProcess.cppのコンパイル時には見つからないためにクラッシュダンプがコンパイルエラーになります。
クラッシュダンプは2013年4月の 07cf7fbb の時点ではデフォルトで無効です。
2015年5月 d627eb2a patchunicode#2268 r4023 でリリースビルドでも有効化されていますが
2015年9月 9ca9366e patchunicode#2268(同上) r4036 でmingwでのヘッダ定義不足のためにifdefが定義されてmingwを除外しようとしています(が少しおかしいようです)
https://github.com/sakura-editor/sakura/blob/1ff0b488e5f11a074127447d4c587d7d914afda6/sakura_core/_main/CProcess.h#L26-L28
とMINIDUMP_TYPEをifdefしていますが、MINIDUMP_TYPEはそもそもenumであって、プリプロセッサマクロ定義ではないのでifdefでは検出できないはずで、つまりVCのみ有効化のつもりが、この時点でVC++でもUSE_MINIDUMPを手動定義しないかぎり、リリースビルドでもデバッグ版でも無効になっているものと考えられます。
ついでにいえば、_Tマクロ切り替えは廃止されているので、_Tになってるのも、修正したほうがよさそうです。 L文字列とANSI文字列の結合はL文字列とみなす、というC++仕様がある(はずな)ので問題になることはなさそうですが、気持ち悪いといえばそうです。
ソースコード上などでUSE_CRASHDUMPを定義すると、テストコードでコンパイルエラーが出ます。 dbghelp.hまたはimagehlp.hのインクルードが必要そうです。 1>(省略...)\main\sakura_core_main\cprocess.h(72): error C2061: 構文エラー: 識別子 'MINIDUMP_TYPE' (ソース ファイルをコンパイルしています test-csakuraenvironment.cpp) 1>(省略...)\main\sakura_core_main\cprocess.h(72): error C2061: 構文エラー: 識別子 'MINIDUMP_TYPE' (ソース ファイルをコンパイルしています test-cdlgprofilemgr.cpp) 1>(省略...)\main\sakura_core_main\cprocess.h(72): error C2061: 構文エラー: 識別子 'MINIDUMP_TYPE' (ソース ファイルをコンパイルしています test-file.cpp) 1>(省略...)\main\sakura_core_main\cprocess.h(72): error C2061: 構文エラー: 識別子 'MINIDUMP_TYPE' (ソース ファイルをコンパイルしています test-winmain.cpp)
「sakura(デバッグ版)」になるのは、
_GSTR_APPNAME_ですね。_APP_NAME(_T)は_T("sakura")で固定でデバッグ版でも同じです。
あ、そうですね(汗