| Index: test/cctest/test-debug.cc
|
| diff --git a/test/cctest/test-debug.cc b/test/cctest/test-debug.cc
|
| index b69ecccd6b791aeea40694d47368e47b7605f929..36b27e7f997c8a0fcaa391b7f81daa90d2cc7b0f 100644
|
| --- a/test/cctest/test-debug.cc
|
| +++ b/test/cctest/test-debug.cc
|
| @@ -3872,6 +3872,23 @@ int GetBreakpointIdFromBreakEventMessage(char *message) {
|
| }
|
|
|
|
|
| +// We match parts of the message to get total frames number.
|
| +int GetTotalFramesInt(char *message) {
|
| + const char* prefix = "\"totalFrames\":";
|
| + char* pos = strstr(message, prefix);
|
| + if (pos == NULL) {
|
| + return -1;
|
| + }
|
| + pos += strlen(prefix);
|
| + char* pos_end = pos;
|
| + long res = strtol(pos, &pos_end, 10);
|
| + if (pos_end == pos) {
|
| + return -1;
|
| + }
|
| + return static_cast<int>(res);
|
| +}
|
| +
|
| +
|
| /* Test MessageQueues */
|
| /* Tests the message queues that hold debugger commands and
|
| * response messages to the debugger. Fills queues and makes
|
| @@ -5827,6 +5844,58 @@ TEST(ProcessDebugMessages) {
|
| }
|
|
|
|
|
| +struct BracktraceData {
|
| + static int frame_counter;
|
| + static void MessageHandler(const v8::Debug::Message& message) {
|
| + char print_buffer[1000];
|
| + v8::String::Value json(message.GetJSON());
|
| + Utf16ToAscii(*json, json.length(), print_buffer, 1000);
|
| +
|
| + if (strstr(print_buffer, "backtrace") == NULL) {
|
| + return;
|
| + }
|
| + frame_counter = GetTotalFramesInt(print_buffer);
|
| + }
|
| +};
|
| +
|
| +int BracktraceData::frame_counter;
|
| +
|
| +
|
| +// Test that debug messages get processed when ProcessDebugMessages is called.
|
| +TEST(Backtrace) {
|
| + v8::HandleScope scope;
|
| + DebugLocalContext env;
|
| +
|
| + v8::Debug::SetMessageHandler2(BracktraceData::MessageHandler);
|
| +
|
| + const int kBufferSize = 1000;
|
| + uint16_t buffer[kBufferSize];
|
| + const char* scripts_command =
|
| + "{\"seq\":0,"
|
| + "\"type\":\"request\","
|
| + "\"command\":\"backtrace\"}";
|
| +
|
| + // Check backtrace from ProcessDebugMessages.
|
| + BracktraceData::frame_counter = -10;
|
| + v8::Debug::SendCommand(buffer, AsciiToUtf16(scripts_command, buffer));
|
| + v8::Debug::ProcessDebugMessages();
|
| + CHECK_EQ(BracktraceData::frame_counter, 0);
|
| +
|
| + v8::Handle<v8::String> void0 = v8::String::New("void(0)");
|
| + v8::Handle<v8::Script> script = v8::Script::Compile(void0, void0);
|
| +
|
| + // Check backtrace from "void(0)" script.
|
| + BracktraceData::frame_counter = -10;
|
| + v8::Debug::SendCommand(buffer, AsciiToUtf16(scripts_command, buffer));
|
| + script->Run();
|
| + CHECK_EQ(BracktraceData::frame_counter, 1);
|
| +
|
| + // Get rid of the debug message handler.
|
| + v8::Debug::SetMessageHandler2(NULL);
|
| + CheckDebuggerUnloaded();
|
| +}
|
| +
|
| +
|
| TEST(GetMirror) {
|
| v8::HandleScope scope;
|
| DebugLocalContext env;
|
|
|