summaryrefslogtreecommitdiffstats
path: root/tools/gypv8sh.py
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-11 10:37:38 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-11 10:37:38 +0000
commit7abe3e8039162fcb1eb5a1c40c2b22a89122e103 (patch)
tree3fc3f7cfc76944132f2a4ccd87e684bde369747c /tools/gypv8sh.py
parent6abc808111557dce56a625b874aa39d3c71aeb48 (diff)
downloadchromium_src-7abe3e8039162fcb1eb5a1c40c2b22a89122e103.zip
chromium_src-7abe3e8039162fcb1eb5a1c40c2b22a89122e103.tar.gz
chromium_src-7abe3e8039162fcb1eb5a1c40c2b22a89122e103.tar.bz2
Use LLDB in gypv8sh to debug random crashes.
Nico tells me that lldb is better than gdb. So give it a try. BUG=370551 R=marja@chromium.org Review URL: https://codereview.chromium.org/386913002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282607 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/gypv8sh.py')
-rwxr-xr-xtools/gypv8sh.py38
1 files changed, 32 insertions, 6 deletions
diff --git a/tools/gypv8sh.py b/tools/gypv8sh.py
index ad6fa4a..8e8fd59 100755
--- a/tools/gypv8sh.py
+++ b/tools/gypv8sh.py
@@ -50,12 +50,38 @@ def main ():
if p.returncode:
# TODO(jochen): Remove once crbug.com/370551 is resolved.
if sys.platform == 'darwin':
- cmd[:0] = ['gdb', '-batch', '-ex', 'run', '-ex', 'bt', '-ex', 'quit',
- '-args']
- p = subprocess.Popen(
- cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=0)
- out, err = p.communicate()
- raise Exception('Failed to run d8', out, err)
+ sys.path.insert(0, '/Developer/Library/PrivateFrameworks/'
+ 'LLDB.framework/Resources/Python')
+ try:
+ import lldb
+ except:
+ raise Exception("Could not load lldb module")
+ debugger = lldb.SBDebugger.Create()
+ debugger.SetAsync(False)
+ target = debugger.CreateTargetWithFileAndArch(
+ cmd[0], lldb.LLDB_ARCH_DEFAULT)
+ if not target:
+ raise Exception("Failed to create d8 target")
+ process = target.LaunchSimple(cmd[1:], None, os.getcwd())
+ if not process:
+ raise Exception("Failed to start d8")
+ if process.GetState() == lldb.eStateStopped:
+ for thread in process:
+ print "Thread (id %d)" % thread.GetThreadID()
+ for frame in thread:
+ print frame
+ print ""
+ raise Exception(
+ "d8 crashed, please report this at http://crbug.com/370551")
+ else:
+ # For some reason d8 worked this time...
+ out = ''
+ while True:
+ s = process.GetSTDOUT(4096)
+ if s == '':
+ break
+ out += s
+
with open(cxxoutfile, 'wb') as f:
f.write(out)
shutil.copyfile(inputfile, jsoutfile)