| OLD | NEW |
| 1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 Debug = debug.Debug | 30 Debug = debug.Debug |
| 31 | 31 |
| 32 // Simple function which stores the last debug event. | 32 // Simple function which stores the last debug event. |
| 33 var listenerComplete = false; | 33 var listenerComplete = false; |
| 34 var exception = false; | 34 var exception = false; |
| 35 var f_script_id = 0; | 35 var f_script_id = 0; |
| 36 var g_script_id = 0; | 36 var g_script_id = 0; |
| 37 var h_script_id = 0; | 37 var h_script_id = 0; |
| 38 var f_line = 0; | 38 var f_line = 0; |
| 39 var g_line = 0; | 39 var g_line = 0; |
| 40 | 40 var h_line = 0; |
| 41 var base_request = '"seq":0,"type":"request","command":"setbreakpoint"' | |
| 42 | |
| 43 function safeEval(code) { | |
| 44 try { | |
| 45 return eval('(' + code + ')'); | |
| 46 } catch (e) { | |
| 47 assertEquals(void 0, e); | |
| 48 return undefined; | |
| 49 } | |
| 50 } | |
| 51 | |
| 52 function testArguments(dcp, arguments, success, is_script) { | |
| 53 var request = '{' + base_request + ',"arguments":' + arguments + '}' | |
| 54 var json_response = dcp.processDebugJSONRequest(request); | |
| 55 var response = safeEval(json_response); | |
| 56 if (success) { | |
| 57 assertTrue(response.success, request + ' -> ' + json_response); | |
| 58 if (is_script) { | |
| 59 assertEquals('scriptName', response.body.type, request + ' -> ' + json_res
ponse); | |
| 60 } else { | |
| 61 assertEquals('scriptId', response.body.type, request + ' -> ' + json_respo
nse); | |
| 62 } | |
| 63 } else { | |
| 64 assertFalse(response.success, request + ' -> ' + json_response); | |
| 65 } | |
| 66 return response; | |
| 67 } | |
| 68 | 41 |
| 69 function listener(event, exec_state, event_data, data) { | 42 function listener(event, exec_state, event_data, data) { |
| 70 try { | 43 try { |
| 71 if (event == Debug.DebugEvent.Break) { | 44 if (event == Debug.DebugEvent.Break) { |
| 72 // Get the debug command processor. | 45 Debug.setBreakPoint(exec_state.evaluateGlobal("f").value()); |
| 73 var dcp = exec_state.debugCommandProcessor("unspecified_running_state"); | 46 Debug.setBreakPoint(exec_state.evaluateGlobal("h").value()); |
| 47 Debug.setBreakPoint(exec_state.evaluateGlobal("f").value(), 1); |
| 48 Debug.setBreakPoint(exec_state.evaluateGlobal("f").value(), 1); |
| 49 Debug.setBreakPoint(exec_state.evaluateGlobal("f").value(), |
| 50 undefined, undefined, "i == 1"); |
| 74 | 51 |
| 75 // Test some illegal setbreakpoint requests. | 52 Debug.setScriptBreakPointByName("test"); |
| 76 var request = '{' + base_request + '}' | 53 Debug.setScriptBreakPointByName("test", 1); |
| 77 var response = safeEval(dcp.processDebugJSONRequest(request)); | 54 Debug.setScriptBreakPointByName("test", 1, 1); |
| 78 assertFalse(response.success); | |
| 79 | 55 |
| 80 var mirror; | 56 Debug.setScriptBreakPointByName(f_script_id, f_line); |
| 57 Debug.setScriptBreakPointByName(g_script_id, g_line); |
| 58 Debug.setScriptBreakPointByName(h_script_id, h_line); |
| 81 | 59 |
| 82 testArguments(dcp, '{}', false); | 60 // Indicate that all was processed. |
| 83 testArguments(dcp, '{"type":"xx"}', false); | 61 listenerComplete = true; |
| 84 testArguments(dcp, '{"type":"function"}', false); | 62 } |
| 85 testArguments(dcp, '{"type":"script"}', false); | |
| 86 testArguments(dcp, '{"target":"f"}', false); | |
| 87 testArguments(dcp, '{"type":"xx","target":"xx"}', false); | |
| 88 testArguments(dcp, '{"type":"function","target":1}', false); | |
| 89 testArguments(dcp, '{"type":"function","target":"f","line":-1}', false); | |
| 90 testArguments(dcp, '{"type":"function","target":"f","column":-1}', false); | |
| 91 testArguments(dcp, '{"type":"handle","target":"-1"}', false); | |
| 92 mirror = debug.MakeMirror(o); | |
| 93 testArguments(dcp, '{"type":"handle","target":' + mirror.handle() + '}', fal
se); | |
| 94 | |
| 95 // Test some legal setbreakpoint requests. | |
| 96 testArguments(dcp, '{"type":"function","target":"f"}', true, false); | |
| 97 testArguments(dcp, '{"type":"function","target":"h"}', true, false); | |
| 98 testArguments(dcp, '{"type":"function","target":"f","line":1}', true, false)
; | |
| 99 testArguments(dcp, '{"type":"function","target":"f","position":1}', true, fa
lse); | |
| 100 testArguments(dcp, '{"type":"function","target":"f","condition":"i == 1"}',
true, false); | |
| 101 testArguments(dcp, '{"type":"function","target":"f","enabled":true}', true,
false); | |
| 102 testArguments(dcp, '{"type":"function","target":"f","enabled":false}', true,
false); | |
| 103 | |
| 104 testArguments(dcp, '{"type":"script","target":"test"}', true, true); | |
| 105 testArguments(dcp, '{"type":"script","target":"test"}', true, true); | |
| 106 testArguments(dcp, '{"type":"script","target":"test","line":1}', true, true)
; | |
| 107 testArguments(dcp, '{"type":"script","target":"test","column":1}', true, tru
e); | |
| 108 | |
| 109 testArguments(dcp, '{"type":"scriptId","target":' + f_script_id + ',"line":'
+ f_line + '}', true, false); | |
| 110 testArguments(dcp, '{"type":"scriptId","target":' + g_script_id + ',"line":'
+ g_line + '}', true, false); | |
| 111 testArguments(dcp, '{"type":"scriptId","target":' + h_script_id + ',"line":'
+ h_line + '}', true, false); | |
| 112 | |
| 113 mirror = debug.MakeMirror(f); | |
| 114 testArguments(dcp, '{"type":"handle","target":' + mirror.handle() + '}', tru
e, false); | |
| 115 mirror = debug.MakeMirror(o.a); | |
| 116 testArguments(dcp, '{"type":"handle","target":' + mirror.handle() + '}', tru
e, false); | |
| 117 | |
| 118 testArguments(dcp, '{"type":"script","target":"sourceUrlScript","line":0}',
true, true); | |
| 119 | |
| 120 // Set a break point on a line with the comment, and check that actual posit
ion | |
| 121 // is the next line after the comment. | |
| 122 request = '{"type":"scriptId","target":' + g_script_id + ',"line":' + (g_lin
e + 1) + '}'; | |
| 123 response = testArguments(dcp, request, true, false); | |
| 124 assertEquals(g_line + 2, response.body.actual_locations[0].line); | |
| 125 | |
| 126 // Indicate that all was processed. | |
| 127 listenerComplete = true; | |
| 128 } | |
| 129 } catch (e) { | 63 } catch (e) { |
| 130 exception = e | 64 exception = e |
| 131 }; | 65 }; |
| 132 }; | 66 }; |
| 133 | 67 |
| 134 // Add the debug event listener. | 68 // Add the debug event listener. |
| 135 Debug.setListener(listener); | 69 Debug.setListener(listener); |
| 136 | 70 |
| 137 function f() { | 71 function f() { |
| 138 a=1 | 72 a=1 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 | 112 |
| 179 // Try setting breakpoint by url specified in sourceURL | 113 // Try setting breakpoint by url specified in sourceURL |
| 180 | 114 |
| 181 var breakListenerCalled = false; | 115 var breakListenerCalled = false; |
| 182 | 116 |
| 183 function breakListener(event) { | 117 function breakListener(event) { |
| 184 if (event == Debug.DebugEvent.Break) | 118 if (event == Debug.DebugEvent.Break) |
| 185 breakListenerCalled = true; | 119 breakListenerCalled = true; |
| 186 } | 120 } |
| 187 | 121 |
| 122 Debug.setBreakPoint(sourceUrlFunc); |
| 123 |
| 188 Debug.setListener(breakListener); | 124 Debug.setListener(breakListener); |
| 189 | 125 |
| 190 sourceUrlFunc(); | 126 sourceUrlFunc(); |
| 191 | 127 |
| 192 assertTrue(breakListenerCalled, "Break listener not called on breakpoint set by
sourceURL"); | 128 assertTrue(breakListenerCalled, "Break listener not called on breakpoint set by
sourceURL"); |
| 193 | 129 |
| 194 | 130 |
| 195 // Breakpoint in a script with no statements test case. If breakpoint is set | 131 // Breakpoint in a script with no statements test case. If breakpoint is set |
| 196 // to the script body, its actual position is taken from the nearest statement | 132 // to the script body, its actual position is taken from the nearest statement |
| 197 // below or like in this case is reset to the very end of the script. | 133 // below or like in this case is reset to the very end of the script. |
| 198 // Unless some precautions made, this position becomes out-of-range and | 134 // Unless some precautions made, this position becomes out-of-range and |
| 199 // we get an exception. | 135 // we get an exception. |
| 200 | 136 |
| 201 // Gets a script of 'i1' function and sets the breakpoint at line #4 which | 137 // Gets a script of 'i1' function and sets the breakpoint at line #4 which |
| 202 // should be empty. | 138 // should be empty. |
| 203 function SetBreakpointInI1Script() { | 139 function SetBreakpointInI1Script() { |
| 204 var i_script = Debug.findScript(i1); | 140 var i_script = Debug.findScript(i1); |
| 205 assertTrue(!!i_script, "invalid script for i1"); | 141 assertTrue(!!i_script, "invalid script for i1"); |
| 206 Debug.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, | 142 Debug.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, |
| 207 i_script.id, 4); | 143 i_script.id, 4); |
| 208 } | 144 } |
| 209 | 145 |
| 210 // Creates the eval script and tries to set the breakpoint. | 146 // Creates the eval script and tries to set the breakpoint. |
| 211 // The tricky part is that the script function must be strongly reachable at the | 147 // The tricky part is that the script function must be strongly reachable at the |
| 212 // moment. Since there's no way of simply getting the pointer to the function, | 148 // moment. Since there's no way of simply getting the pointer to the function, |
| 213 // we run this code while the script function is being activated on stack. | 149 // we run this code while the script function is being activated on stack. |
| 214 eval('SetBreakpointInI1Script()\nfunction i1(){}\n\n\n\nfunction i2(){}\n'); | 150 eval('SetBreakpointInI1Script()\nfunction i1(){}\n\n\n\nfunction i2(){}\n'); |
| OLD | NEW |