Index: tools/gypv8sh.py |
diff --git a/tools/gypv8sh.py b/tools/gypv8sh.py |
index ad6fa4a36328c24e7e7dc5df1b165fb773c395d4..8e8fd59fb1a27a3080636da580bbf84fb845607a 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) |