OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 // Flags: --validate-asm |
| 6 |
| 7 function testFunction() { |
| 8 function generateAsmJs(stdlib, foreign, heap) { |
| 9 'use asm'; |
| 10 var debugger_fun = foreign.call_debugger; |
| 11 function callDebugger() { |
| 12 debugger_fun(); |
| 13 } |
| 14 function redirectFun() { |
| 15 callDebugger(); |
| 16 } |
| 17 return redirectFun; |
| 18 } |
| 19 |
| 20 function call_debugger() { |
| 21 debugger; |
| 22 } |
| 23 |
| 24 var fun = generateAsmJs(this, {'call_debugger': call_debugger}, undefined); |
| 25 fun(); |
| 26 } |
| 27 |
| 28 InspectorTest.addScript(testFunction.toString()); |
| 29 |
| 30 Protocol.Debugger.enable(); |
| 31 Protocol.Debugger.oncePaused().then(handleDebuggerPaused); |
| 32 Protocol.Runtime.evaluate({'expression': 'testFunction()'}); |
| 33 |
| 34 function locationToString(callFrame) { |
| 35 var res = {functionName: callFrame.functionName}; |
| 36 for (var attr in callFrame.functionLocation) { |
| 37 if (attr == 'scriptId') continue; |
| 38 res['function_'+attr] = callFrame.functionLocation[attr]; |
| 39 } |
| 40 for (var attr in callFrame.location) { |
| 41 if (attr == 'scriptId') continue; |
| 42 res[attr] = callFrame.location[attr]; |
| 43 } |
| 44 return JSON.stringify(res); |
| 45 } |
| 46 |
| 47 function logStackTrace(messageObject) { |
| 48 var frames = messageObject.params.callFrames; |
| 49 InspectorTest.log('Number of frames: ' + frames.length); |
| 50 for (var i = 0; i < frames.length; ++i) { |
| 51 InspectorTest.log(' - [' + i + '] ' + locationToString(frames[i])); |
| 52 } |
| 53 } |
| 54 |
| 55 function handleDebuggerPaused(messageObject) |
| 56 { |
| 57 InspectorTest.log('Paused on \'debugger;\''); |
| 58 logStackTrace(messageObject); |
| 59 InspectorTest.log('Getting v8-generated stack trace...'); |
| 60 var topFrameId = messageObject.params.callFrames[0].callFrameId; |
| 61 Protocol.Debugger |
| 62 .evaluateOnCallFrame({ |
| 63 callFrameId: topFrameId, |
| 64 expression: '(new Error("getting stack trace")).stack' |
| 65 }) |
| 66 .then(callbackEvaluate); |
| 67 } |
| 68 |
| 69 function callbackEvaluate(response) |
| 70 { |
| 71 InspectorTest.log( |
| 72 'Result of evaluate (' + response.result.result.type + '):'); |
| 73 var result_lines = response.result.result.value.split("\n"); |
| 74 // Skip the second line, containing the 'evaluate' position. |
| 75 result_lines[1] = " -- skipped --"; |
| 76 InspectorTest.log(result_lines.join('\n')); |
| 77 InspectorTest.log('Finished!'); |
| 78 InspectorTest.completeTest(); |
| 79 } |
OLD | NEW |