diff options
author | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-11 10:37:38 +0000 |
---|---|---|
committer | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-11 10:37:38 +0000 |
commit | 7abe3e8039162fcb1eb5a1c40c2b22a89122e103 (patch) | |
tree | 3fc3f7cfc76944132f2a4ccd87e684bde369747c /tools/gypv8sh.py | |
parent | 6abc808111557dce56a625b874aa39d3c71aeb48 (diff) | |
download | chromium_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-x | tools/gypv8sh.py | 38 |
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) |