Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: tools/utils.py

Issue 2815553003: Add support for core dump archiving on macos (Closed)
Patch Set: wrap in try-catch Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/utils.py
diff --git a/tools/utils.py b/tools/utils.py
index b4ae99ce8074278efe58313e321f59d2f7c114f3..94dbb8e1ca19993aa4175b7dfe872672f09d6ced 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -722,22 +722,28 @@ class SiteConfigBotoFileDisabler(object):
if self._old_boto:
os.environ['BOTO_CONFIG'] = self._old_boto
-class PosixCoredumpEnabler(object):
+class PosixCoreDumpEnabler(object):
def __init__(self):
self._old_limits = None
def __enter__(self):
self._old_limits = resource.getrlimit(resource.RLIMIT_CORE)
+ resource.setrlimit(resource.RLIMIT_CORE, (-1, -1))
+ def __exit__(self, *_):
+ resource.setrlimit(resource.RLIMIT_CORE, self._old_limits)
+
+class LinuxCoreDumpEnabler(PosixCoreDumpEnabler):
+ def __enter__(self):
# Bump core limits to unlimited if core_pattern is correctly configured.
if CheckLinuxCoreDumpPattern(fatal=False):
- resource.setrlimit(resource.RLIMIT_CORE, (-1, -1))
+ super(LinuxCoreDumpEnabler, self).__enter__()
- def __exit__(self, *_):
- resource.setrlimit(resource.RLIMIT_CORE, self._old_limits)
+ def __exit__(self, *args):
CheckLinuxCoreDumpPattern(fatal=True)
+ super(LinuxCoreDumpEnabler, self).__exit__(*args)
-class WindowsCoredumpEnabler(object):
+class WindowsCoreDumpEnabler(object):
"""Configure Windows Error Reporting to store crash dumps.
The documentation can be found here:
@@ -780,7 +786,7 @@ class WindowsCoredumpEnabler(object):
self.winreg.SetValueEx(wer, "Disabled", 0, self.winreg.REG_DWORD, 1)
coredump_folder = os.path.join(
- os.getcwd(), WindowsCoredumpEnabler.WINDOWS_COREDUMP_FOLDER)
+ os.getcwd(), WindowsCoreDumpEnabler.WINDOWS_COREDUMP_FOLDER)
# Create the directory which will contain the dumps
if not os.path.exists(coredump_folder):
@@ -944,15 +950,18 @@ class BaseCoreDumpArchiver(object):
os.unlink(binary)
return found
-class LinuxCoreDumpArchiver(BaseCoreDumpArchiver):
- def __init__(self):
- super(self.__class__, self).__init__(os.getcwd())
+class PosixCoreDumpArchiver(BaseCoreDumpArchiver):
+ def __init__(self, search_dir):
+ super(PosixCoreDumpArchiver, self).__init__(search_dir)
def _cleanup(self):
- found = super(self.__class__, self)._cleanup()
+ found = super(PosixCoreDumpArchiver, self)._cleanup()
for core in glob.glob(os.path.join(self._search_dir, 'core.*')):
found = True
- os.unlink(core)
+ try:
+ os.unlink(core)
+ except:
+ pass
return found
def _find_coredump_file(self, crash):
@@ -960,13 +969,21 @@ class LinuxCoreDumpArchiver(BaseCoreDumpArchiver):
if os.path.exists(core_filename):
return core_filename
+class LinuxCoreDumpArchiver(PosixCoreDumpArchiver):
+ def __init__(self):
+ super(LinuxCoreDumpArchiver, self).__init__(os.getcwd())
+
+class MacOSCoreDumpArchiver(PosixCoreDumpArchiver):
+ def __init__(self):
+ super(MacOSCoreDumpArchiver, self).__init__('/cores')
+
class WindowsCoreDumpArchiver(BaseCoreDumpArchiver):
def __init__(self):
- super(self.__class__, self).__init__(os.path.join(
- os.getcwd(), WindowsCoredumpEnabler.WINDOWS_COREDUMP_FOLDER))
+ super(WindowsCoreDumpArchiver, self).__init__(os.path.join(
+ os.getcwd(), WindowsCoreDumpEnabler.WINDOWS_COREDUMP_FOLDER))
def _cleanup(self):
- found = super(self.__class__, self)._cleanup()
+ found = super(WindowsCoreDumpArchiver, self)._cleanup()
for core in glob.glob(os.path.join(self._search_dir, '*')):
found = True
os.unlink(core)
@@ -980,7 +997,7 @@ class WindowsCoreDumpArchiver(BaseCoreDumpArchiver):
def _report_missing_crashes(self, missing, throw=True):
# Let's only print the debugging information and not throw. We'll do more
# validation for werfault.exe and throw afterwards.
- super(self.__class__, self)._report_missing_crashes(missing, throw=False)
+ super(WindowsCoreDumpArchiver, self)._report_missing_crashes(missing, throw=False)
# Let's check again for the image execution options for werfault. Maybe
# puppet came a long during testing and reverted our change.
@@ -991,7 +1008,7 @@ class WindowsCoreDumpArchiver(BaseCoreDumpArchiver):
for wowbit in [winreg.KEY_WOW64_64KEY, winreg.KEY_WOW64_32KEY]:
try:
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
- WindowsCoredumpEnabler.IMGEXEC_NAME,
+ WindowsCoreDumpEnabler.IMGEXEC_NAME,
0,
winreg.KEY_READ | wowbit) as handle:
raise Exception(
@@ -1010,7 +1027,6 @@ class WindowsCoreDumpArchiver(BaseCoreDumpArchiver):
def NooptCoreDumpArchiver():
yield
-
def CoreDumpArchiver(args):
enabled = '--copy-coredumps' in args
@@ -1019,10 +1035,13 @@ def CoreDumpArchiver(args):
osname = GuessOS()
if osname == 'linux':
- return contextlib.nested(PosixCoredumpEnabler(),
+ return contextlib.nested(LinuxCoreDumpEnabler(),
LinuxCoreDumpArchiver())
+ elif osname == 'macos':
+ return contextlib.nested(PosixCoreDumpEnabler(),
+ MacOSCoreDumpArchiver())
elif osname == 'win32':
- return contextlib.nested(WindowsCoredumpEnabler(),
+ return contextlib.nested(WindowsCoreDumpEnabler(),
WindowsCoreDumpArchiver())
else:
# We don't have support for MacOS yet.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698