Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(965)

Unified Diff: test/cctest/test-debug.cc

Issue 9295014: Find correct source position in inlined functions on debug break. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/runtime.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-debug.cc
diff --git a/test/cctest/test-debug.cc b/test/cctest/test-debug.cc
index c0ea7072fed35bd782f377a8b2d974bc9d32dc98..1e674dc2bdf89bb7a451838c52b38226238b616b 100644
--- a/test/cctest/test-debug.cc
+++ b/test/cctest/test-debug.cc
@@ -7286,4 +7286,57 @@ TEST(DebugBreakLoop) {
}
Søren Gjesse 2012/01/30 08:59:28 I think this test could have been written in JavaS
+class DebugBreakSendThread : public v8::internal::Thread {
+ public:
+ DebugBreakSendThread() : Thread("DebugBreakSendThread") { }
+ virtual void Run() {
+ // Wait for crankshaft to inline f() into g();
Søren Gjesse 2012/01/30 08:59:28 Having tests with sleeps in then is not a good ide
+ OS::Sleep(2000);
+ v8::Debug::DebugBreak();
+ }
+};
+
+
+static void DebugBreakInlineListener(v8::DebugEvent event,
+ v8::Handle<v8::Object> exec_state,
+ v8::Handle<v8::Object> event_data,
+ v8::Handle<v8::Value> data) {
+ if (event != v8::Break) return;
+
+ int break_id = v8::internal::Isolate::Current()->debug()->break_id();
+ char script[128];
+ i::Vector<char> script_vector(script, sizeof(script));
+ OS::SNPrintF(script_vector, "%%GetFrameCount(%d)", break_id);
+ v8::Local<v8::Value> result = CompileRun(script);
+ int frame_count = result->Int32Value();
+ int previous = -1;
+ for (int i = 0; i < frame_count; i++) {
+ // The 5. element in the returned array of GetFrameDetails contains the
+ // source position of that frame.
+ OS::SNPrintF(script_vector, "%%GetFrameDetails(%d, %d)[5]", break_id, i);
+ v8::Local<v8::Value> result = CompileRun(script);
+ ASSERT_NE(previous, result->Int32Value());
+ previous = result->Int32Value();
+ }
+
+ v8::V8::TerminateExecution();
+}
+
+
+TEST(DebugBreakInline) {
+ i::FLAG_allow_natives_syntax = true;
+ v8::HandleScope scope;
+ DebugLocalContext env;
+ const char* source =
+ "function f() { for(var i=0; i<1000000; i++) { 1+1; } };\n"
+ "function g() { while(true) {f();} };\n"
+ "g();";
+ v8::Debug::SetDebugEventListener(DebugBreakInlineListener);
+ DebugBreakSendThread debugbreak;
+ debugbreak.Start();
+ CompileRun(source);
+ v8::Debug::SetDebugEventListener(NULL);
+}
+
+
#endif // ENABLE_DEBUGGER_SUPPORT
« no previous file with comments | « src/runtime.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698