summaryrefslogtreecommitdiffstats
path: root/base/debug
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-17 23:29:55 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-17 23:29:55 +0000
commit8a65f28ef02c68fa3d6d94fee19287723983f057 (patch)
treee1e4ce71fcd4ef713b39825001922cb3651385d7 /base/debug
parenta7cf736adbbf691ac85e6e7be5816cb4365cab98 (diff)
downloadchromium_src-8a65f28ef02c68fa3d6d94fee19287723983f057.zip
chromium_src-8a65f28ef02c68fa3d6d94fee19287723983f057.tar.gz
chromium_src-8a65f28ef02c68fa3d6d94fee19287723983f057.tar.bz2
Remove --debug-on-start and --debug-children.
debug_on_start_win.cc also had some code to support --wait-for-debugger, but I don't think it's important to preserve it. This would only have any effect in modules which included debug_on_start.h, which was basically just test code; and it also wouldn't have any effect when the component build is enabled, which I suspect is true for most developers trying to run tests. I didn't remove any of the other pieces of --wait-for-debugger elsewhere. BUG=359822 TEST=none R=darin@chromium.org Review URL: https://codereview.chromium.org/227723008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264671 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/debug')
-rw-r--r--base/debug/debug_on_start_win.cc74
-rw-r--r--base/debug/debug_on_start_win.h83
-rw-r--r--base/debug/debugger.h4
-rw-r--r--base/debug/debugger_posix.cc18
-rw-r--r--base/debug/debugger_win.cc89
5 files changed, 1 insertions, 267 deletions
diff --git a/base/debug/debug_on_start_win.cc b/base/debug/debug_on_start_win.cc
deleted file mode 100644
index 6ca88dd..0000000
--- a/base/debug/debug_on_start_win.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/debug/debug_on_start_win.h"
-
-#include <windows.h>
-
-#include "base/base_switches.h"
-#include "base/basictypes.h"
-#include "base/debug/debugger.h"
-
-namespace base {
-namespace debug {
-
-// Minimalist implementation to try to find a command line argument. We can use
-// kernel32 exported functions but not the CRT functions because we're too early
-// in the process startup.
-// The code is not that bright and will find things like ---argument or
-// /-/argument.
-// Note: command_line is non-destructively modified.
-bool DebugOnStart::FindArgument(wchar_t* command_line, const char* argument_c) {
- wchar_t argument[50] = {};
- for (int i = 0; argument_c[i]; ++i)
- argument[i] = argument_c[i];
-
- int argument_len = lstrlen(argument);
- int command_line_len = lstrlen(command_line);
- while (command_line_len > argument_len) {
- wchar_t first_char = command_line[0];
- wchar_t last_char = command_line[argument_len+1];
- // Try to find an argument.
- if ((first_char == L'-' || first_char == L'/') &&
- (last_char == L' ' || last_char == 0 || last_char == L'=')) {
- command_line[argument_len+1] = 0;
- // Skip the - or /
- if (lstrcmpi(command_line+1, argument) == 0) {
- // Found it.
- command_line[argument_len+1] = last_char;
- return true;
- }
- // Fix back.
- command_line[argument_len+1] = last_char;
- }
- // Continue searching.
- ++command_line;
- --command_line_len;
- }
- return false;
-}
-
-// static
-int __cdecl DebugOnStart::Init() {
- // Try to find the argument.
- if (FindArgument(GetCommandLine(), switches::kDebugOnStart)) {
- // We can do 2 things here:
- // - Ask for a debugger to attach to us. This involve reading the registry
- // key and creating the process.
- // - Do a int3.
-
- // It will fails if we run in a sandbox. That is expected.
- base::debug::SpawnDebuggerOnProcess(GetCurrentProcessId());
-
- // Wait for a debugger to come take us.
- base::debug::WaitForDebugger(60, false);
- } else if (FindArgument(GetCommandLine(), switches::kWaitForDebugger)) {
- // Wait for a debugger to come take us.
- base::debug::WaitForDebugger(60, true);
- }
- return 0;
-}
-
-} // namespace debug
-} // namespace base
diff --git a/base/debug/debug_on_start_win.h b/base/debug/debug_on_start_win.h
deleted file mode 100644
index edcaa0a..0000000
--- a/base/debug/debug_on_start_win.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Define the necessary code and global data to look for kDebugOnStart command
-// line argument. When the command line argument is detected, it invokes the
-// debugger, if no system-wide debugger is registered, a debug break is done.
-
-#ifndef BASE_DEBUG_DEBUG_ON_START_WIN_H_
-#define BASE_DEBUG_DEBUG_ON_START_WIN_H_
-
-#include "base/basictypes.h"
-#include "build/build_config.h"
-
-// This only works on Windows. It's legal to include on other platforms, but
-// will be a NOP.
-#if defined(OS_WIN)
-
-#ifndef DECLSPEC_SELECTANY
-#define DECLSPEC_SELECTANY __declspec(selectany)
-#endif
-
-namespace base {
-namespace debug {
-
-// There is no way for this code, as currently implemented, to work across DLLs.
-// TODO(rvargas): It looks like we really don't use this code, at least not for
-// Chrome. Figure out if it's really worth implementing something simpler.
-#if !defined(COMPONENT_BUILD)
-
-// Debug on start functions and data.
-class DebugOnStart {
- public:
- // Expected function type in the .CRT$XI* section.
- // Note: See VC\crt\src\internal.h for reference.
- typedef int (__cdecl *PIFV)(void);
-
- // Looks at the command line for kDebugOnStart argument. If found, it invokes
- // the debugger, if this fails, it crashes.
- static int __cdecl Init();
-
- // Returns true if the 'argument' is present in the 'command_line'. It does
- // not use the CRT, only Kernel32 functions.
- static bool FindArgument(wchar_t* command_line, const char* argument);
-};
-
-// Set the function pointer to our function to look for a crash on start. The
-// XIB section is started pretty early in the program initialization so in
-// theory it should be called before any user created global variable
-// initialization code and CRT initialization code.
-// Note: See VC\crt\src\defsects.inc and VC\crt\src\crt0.c for reference.
-#ifdef _WIN64
-
-// "Fix" the segment. On x64, the .CRT segment is merged into the .rdata segment
-// so it contains const data only.
-#pragma const_seg(push, ".CRT$XIB")
-// Declare the pointer so the CRT will find it.
-extern const DebugOnStart::PIFV debug_on_start;
-DECLSPEC_SELECTANY const DebugOnStart::PIFV debug_on_start =
- &DebugOnStart::Init;
-// Fix back the segment.
-#pragma const_seg(pop)
-
-#else // _WIN64
-
-// "Fix" the segment. On x86, the .CRT segment is merged into the .data segment
-// so it contains non-const data only.
-#pragma data_seg(push, ".CRT$XIB")
-// Declare the pointer so the CRT will find it.
-DECLSPEC_SELECTANY DebugOnStart::PIFV debug_on_start = &DebugOnStart::Init;
-// Fix back the segment.
-#pragma data_seg(pop)
-
-#endif // _WIN64
-
-#endif // defined(COMPONENT_BUILD)
-
-} // namespace debug
-} // namespace base
-
-#endif // defined(OS_WIN)
-
-#endif // BASE_DEBUG_DEBUG_ON_START_WIN_H_
diff --git a/base/debug/debugger.h b/base/debug/debugger.h
index 4f368d9..d62ea3f 100644
--- a/base/debug/debugger.h
+++ b/base/debug/debugger.h
@@ -14,10 +14,6 @@
namespace base {
namespace debug {
-// Starts the registered system-wide JIT debugger to attach it to specified
-// process.
-BASE_EXPORT bool SpawnDebuggerOnProcess(unsigned process_id);
-
// Waits wait_seconds seconds for a debugger to attach to the current process.
// When silent is false, an exception is thrown when a debugger is detected.
BASE_EXPORT bool WaitForDebugger(int wait_seconds, bool silent);
diff --git a/base/debug/debugger_posix.cc b/base/debug/debugger_posix.cc
index 6554f3f..48393f4 100644
--- a/base/debug/debugger_posix.cc
+++ b/base/debug/debugger_posix.cc
@@ -14,7 +14,6 @@
#include <sys/types.h>
#include <unistd.h>
-#include <string>
#include <vector>
#if defined(__GLIBCXX__)
@@ -41,7 +40,6 @@
#include "base/posix/eintr_wrapper.h"
#include "base/safe_strerror_posix.h"
#include "base/strings/string_piece.h"
-#include "base/strings/stringprintf.h"
#if defined(USE_SYMBOLIZE)
#include "base/third_party/symbolize/symbolize.h"
@@ -54,22 +52,6 @@
namespace base {
namespace debug {
-bool SpawnDebuggerOnProcess(unsigned process_id) {
-#if OS_ANDROID || OS_NACL
- NOTIMPLEMENTED();
- return false;
-#else
- const std::string debug_cmd =
- StringPrintf("xterm -e 'gdb --pid=%u' &", process_id);
- LOG(WARNING) << "Starting debugger on pid " << process_id
- << " with command `" << debug_cmd << "`";
- int ret = system(debug_cmd.c_str());
- if (ret == -1)
- return false;
- return true;
-#endif
-}
-
#if defined(OS_MACOSX) || defined(OS_BSD)
// Based on Apple's recommended method as described in
diff --git a/base/debug/debugger_win.cc b/base/debug/debugger_win.cc
index b13dbfd..ccc9c16 100644
--- a/base/debug/debugger_win.cc
+++ b/base/debug/debugger_win.cc
@@ -4,99 +4,12 @@
#include "base/debug/debugger.h"
+#include <stdlib.h>
#include <windows.h>
-#include <dbghelp.h>
-
-#include "base/basictypes.h"
-#include "base/logging.h"
namespace base {
namespace debug {
-namespace {
-
-// Minimalist key reader.
-// Note: Does not use the CRT.
-bool RegReadString(HKEY root, const wchar_t* subkey,
- const wchar_t* value_name, wchar_t* buffer, int* len) {
- HKEY key = NULL;
- DWORD res = RegOpenKeyEx(root, subkey, 0, KEY_READ, &key);
- if (ERROR_SUCCESS != res || key == NULL)
- return false;
-
- DWORD type = 0;
- DWORD buffer_size = *len * sizeof(wchar_t);
- // We don't support REG_EXPAND_SZ.
- res = RegQueryValueEx(key, value_name, NULL, &type,
- reinterpret_cast<BYTE*>(buffer), &buffer_size);
- if (ERROR_SUCCESS == res && buffer_size != 0 && type == REG_SZ) {
- // Make sure the buffer is NULL terminated.
- buffer[*len - 1] = 0;
- *len = lstrlen(buffer);
- RegCloseKey(key);
- return true;
- }
- RegCloseKey(key);
- return false;
-}
-
-// Replaces each "%ld" in input per a value. Not efficient but it works.
-// Note: Does not use the CRT.
-bool StringReplace(const wchar_t* input, int value, wchar_t* output,
- int output_len) {
- memset(output, 0, output_len*sizeof(wchar_t));
- int input_len = lstrlen(input);
-
- for (int i = 0; i < input_len; ++i) {
- int current_output_len = lstrlen(output);
-
- if (input[i] == L'%' && input[i + 1] == L'l' && input[i + 2] == L'd') {
- // Make sure we have enough place left.
- if ((current_output_len + 12) >= output_len)
- return false;
-
- // Cheap _itow().
- wsprintf(output+current_output_len, L"%d", value);
- i += 2;
- } else {
- if (current_output_len >= output_len)
- return false;
- output[current_output_len] = input[i];
- }
- }
- return true;
-}
-
-} // namespace
-
-// Note: Does not use the CRT.
-bool SpawnDebuggerOnProcess(unsigned process_id) {
- wchar_t reg_value[1026];
- int len = arraysize(reg_value);
- if (RegReadString(HKEY_LOCAL_MACHINE,
- L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug",
- L"Debugger", reg_value, &len)) {
- wchar_t command_line[1026];
- if (StringReplace(reg_value, process_id, command_line,
- arraysize(command_line))) {
- // We don't mind if the debugger is present because it will simply fail
- // to attach to this process.
- STARTUPINFO startup_info = {0};
- startup_info.cb = sizeof(startup_info);
- PROCESS_INFORMATION process_info = {0};
-
- if (CreateProcess(NULL, command_line, NULL, NULL, FALSE, 0, NULL, NULL,
- &startup_info, &process_info)) {
- CloseHandle(process_info.hThread);
- WaitForInputIdle(process_info.hProcess, 10000);
- CloseHandle(process_info.hProcess);
- return true;
- }
- }
- }
- return false;
-}
-
bool BeingDebugged() {
return ::IsDebuggerPresent() != 0;
}