diff --git a/client/crashpad_client_win_test.cc b/client/crashpad_client_win_test.cc index 2215e2a8..fdf773fd 100644 --- a/client/crashpad_client_win_test.cc +++ b/client/crashpad_client_win_test.cc @@ -27,7 +27,7 @@ namespace { void StartAndUseHandler() { ScopedTempDir temp_dir; base::FilePath handler_path = Paths::Executable().DirName().Append( - FILE_PATH_LITERAL("crashpad_handler.exe")); + FILE_PATH_LITERAL("crashpad_handler.com")); CrashpadClient client; ASSERT_TRUE(client.StartHandler(handler_path, temp_dir.path(), diff --git a/handler/handler.gyp b/handler/handler.gyp index bbb2ce4e..a180c933 100644 --- a/handler/handler.gyp +++ b/handler/handler.gyp @@ -89,12 +89,49 @@ }], ], }], + ['OS=="win"', { + 'msvs_settings': { + 'VCLinkerTool': { + 'SubSystem': '2', # /SUBSYSTEM:WINDOWS + }, + }, + }], ], }, ], 'conditions': [ ['OS=="win"', { 'targets': [ + { + # Duplicates crashpad_handler.exe to crashpad_handler.com and makes it + # a console app. + 'target_name': 'crashpad_handler_console', + 'type': 'none', + 'dependencies': [ + '../third_party/mini_chromium/mini_chromium.gyp:base', + '../tools/tools.gyp:crashpad_tool_support', + 'crashpad_handler', + ], + 'actions': [ + { + 'action_name': 'copy handler exe to com', + 'inputs': [ + '<(PRODUCT_DIR)/crashpad_handler.exe', + ], + 'outputs': [ + '<(PRODUCT_DIR)/crashpad_handler.com', + ], + 'action': [ + 'copy <(PRODUCT_DIR)\crashpad_handler.exe ' + '<(PRODUCT_DIR)\crashpad_handler.com >nul && ' + 'editbin -nologo -subsystem:console ' + '<(PRODUCT_DIR)\crashpad_handler.com', + ], + 'msvs_cygwin_shell': '0', + 'quote_cmd': '0', + }, + ], + }, { 'target_name': 'crashy_program', 'type': 'executable', diff --git a/handler/main.cc b/handler/main.cc index f326bd7c..7a169e2d 100644 --- a/handler/main.cc +++ b/handler/main.cc @@ -17,12 +17,16 @@ #include "build/build_config.h" #include "tools/tool_support.h" +#if defined(OS_WIN) +#include +#endif + #if defined(OS_MACOSX) int main(int argc, char* argv[]) { return crashpad::HandlerMain(argc, argv); } #elif defined(OS_WIN) -int wmain(int argc, wchar_t* argv[]) { - return crashpad::ToolSupport::Wmain(argc, argv, crashpad::HandlerMain); +int APIENTRY wWinMain(HINSTANCE, HINSTANCE, wchar_t*, int) { + return crashpad::ToolSupport::Wmain(__argc, __wargv, crashpad::HandlerMain); } #endif // OS_MACOSX diff --git a/snapshot/win/end_to_end_test.py b/snapshot/win/end_to_end_test.py index b277ab0f..62e92ea9 100755 --- a/snapshot/win/end_to_end_test.py +++ b/snapshot/win/end_to_end_test.py @@ -99,7 +99,7 @@ def GetDumpFromProgram(out_dir, pipe_name, executable_name, *args): if pipe_name is not None: handler = subprocess.Popen([ - os.path.join(out_dir, 'crashpad_handler.exe'), + os.path.join(out_dir, 'crashpad_handler.com'), '--pipe-name=' + pipe_name, '--database=' + test_database ]) @@ -116,7 +116,7 @@ def GetDumpFromProgram(out_dir, pipe_name, executable_name, *args): list(args)) else: subprocess.call([os.path.join(out_dir, executable_name), - os.path.join(out_dir, 'crashpad_handler.exe'), + os.path.join(out_dir, 'crashpad_handler.com'), test_database] + list(args)) out = subprocess.check_output([