Chromium Code Reviews| Index: tools/generate_dump.cc |
| diff --git a/tools/generate_dump.cc b/tools/generate_dump.cc |
| index ecb1bda08b32836c6ff2732bffe4ccc25c560391..2419c63b56bb7d933173438854e3c2b490dd1f42 100644 |
| --- a/tools/generate_dump.cc |
| +++ b/tools/generate_dump.cc |
| @@ -14,27 +14,37 @@ |
| #include <fcntl.h> |
| #include <getopt.h> |
| -#include <libgen.h> |
| -#include <mach/mach.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| -#include <unistd.h> |
| +#include <sys/types.h> |
| #include <string> |
| #include "base/logging.h" |
| -#include "base/mac/scoped_mach_port.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/strings/stringprintf.h" |
| +#include "build/build_config.h" |
| #include "minidump/minidump_file_writer.h" |
| -#include "snapshot/mac/process_snapshot_mac.h" |
| #include "tools/tool_support.h" |
| +#include "util/file/basename.h" |
| #include "util/file/file_writer.h" |
| -#include "util/mach/scoped_task_suspend.h" |
| -#include "util/mach/task_for_pid.h" |
| #include "util/posix/drop_privileges.h" |
| #include "util/stdlib/string_number_conversion.h" |
| +#if defined(OS_MACOSX) |
| +#include <libgen.h> |
| +#include <mach/mach.h> |
| +#include <unistd.h> |
| + |
| +#include "base/mac/scoped_mach_port.h" |
| +#include "snapshot/mac/process_snapshot_mac.h" |
| +#include "util/mach/scoped_task_suspend.h" |
| +#include "util/mach/task_for_pid.h" |
| +#elif defined(OS_WIN) |
| +#include "base/strings/utf_string_conversions.h" |
| +#include "snapshot/win/process_snapshot_win.h" |
| +#endif // OS_MACOSX |
| + |
| namespace crashpad { |
| namespace { |
| @@ -58,7 +68,7 @@ void Usage(const std::string& me) { |
| } |
| int GenerateDumpMain(int argc, char* argv[]) { |
| - const std::string me(basename(argv[0])); |
| + const std::string me(Basename(argv[0])); |
| enum OptionFlags { |
| // “Short” (single-character) options. |
| @@ -117,6 +127,7 @@ int GenerateDumpMain(int argc, char* argv[]) { |
| return EXIT_FAILURE; |
| } |
| +#if defined(OS_MACOSX) |
|
Mark Mentovai
2015/05/04 21:21:58
I hope that over time, we can refactor things well
scottmg
2015/05/05 19:26:22
OK. It seems that having a typedef for task_t/proc
Mark Mentovai
2015/05/05 22:41:35
scottmg wrote:
|
| task_t task = TaskForPID(options.pid); |
| if (task == TASK_NULL) { |
| return EXIT_FAILURE; |
| @@ -134,24 +145,51 @@ int GenerateDumpMain(int argc, char* argv[]) { |
| } |
| LOG(WARNING) << "operating on myself"; |
| } |
| +#elif defined(OS_WIN) |
| + ScopedKernelHANDLE process( |
| + OpenProcess(PROCESS_ALL_ACCESS, false, options.pid)); |
| + if (!process.is_valid()) { |
| + LOG(ERROR) << "could not open process " << options.pid; |
| + return EXIT_FAILURE; |
| + } |
| +#endif // OS_MACOSX |
| if (options.dump_path.empty()) { |
| options.dump_path = base::StringPrintf("minidump.%d", options.pid); |
| } |
| { |
| +#if defined(OS_MACOSX) |
| scoped_ptr<ScopedTaskSuspend> suspend; |
| if (options.suspend) { |
| suspend.reset(new ScopedTaskSuspend(task)); |
| } |
| +#elif defined(OS_WIN) |
| + if (options.suspend) { |
| + LOG(ERROR) << "TODO(scottmg): --suspend not implemented yet."; |
| + return EXIT_FAILURE; |
| + } |
| +#endif // OS_MACOSX |
| +#if defined(OS_MACOSX) |
| ProcessSnapshotMac process_snapshot; |
| if (!process_snapshot.Initialize(task)) { |
| return EXIT_FAILURE; |
| } |
| +#elif defined(OS_WIN) |
| + ProcessSnapshotWin process_snapshot; |
| + if (!process_snapshot.Initialize(process.get())) { |
| + return EXIT_FAILURE; |
| + } |
| +#endif // OS_MACOSX |
| FileWriter file_writer; |
| - if (!file_writer.Open(base::FilePath(options.dump_path), |
| +#if defined(OS_MACOSX) |
| + base::FilePath dump_path(options.dump_path); |
| +#elif defined(OS_WIN) |
| + base::FilePath dump_path(base::UTF8ToUTF16(options.dump_path)); |
| +#endif // OS_MACOSX |
| + if (!file_writer.Open(dump_path, |
| FileWriteMode::kTruncateOrCreate, |
| FilePermissions::kWorldReadable)) { |
| return EXIT_FAILURE; |