Skip to content

Commit

Permalink
Only capture stack traces in debug mode
Browse files Browse the repository at this point in the history
  • Loading branch information
jhurliman committed Aug 14, 2011
1 parent 275b081 commit f0ba8ff
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 26 deletions.
44 changes: 23 additions & 21 deletions src/node.cc
Expand Up @@ -141,7 +141,7 @@ Persistent<String> unknown_symbol;

static char *eval_string = NULL;
static int option_end_index = 0;
static bool use_debug_agent = false;
bool use_debug_agent = false;
static bool debug_wait_connect = false;
static int debug_port=5858;
static int max_stack_size = 0;
Expand Down Expand Up @@ -2022,28 +2022,30 @@ static Handle<Value> Watchers(const Arguments& args) {

obj->Set(handle_symbol, wrap->handle_);

// Convert the stack trace to a string
// If there is a stack trace, convert it to a string
Persistent<StackTrace> trace = wrap->trace_;
Local<String> stack_str = String::Empty();
int length = trace->GetFrameCount();
for (int j = 0; j < length; j++) {
Local<StackFrame> frame = trace->GetFrame(j);

stack_str = String::Concat(stack_str, String::NewSymbol(" at "));
stack_str = String::Concat(stack_str, frame->GetFunctionName());
stack_str = String::Concat(stack_str, String::NewSymbol(" ("));
stack_str = String::Concat(stack_str, frame->GetScriptName());
stack_str = String::Concat(stack_str, String::NewSymbol(":"));
stack_str = String::Concat(stack_str,
Integer::NewFromUnsigned(frame->GetLineNumber())->ToString());
stack_str = String::Concat(stack_str, String::NewSymbol(":"));
stack_str = String::Concat(stack_str,
Integer::NewFromUnsigned(frame->GetColumn())->ToString());
stack_str = String::Concat(stack_str, String::NewSymbol(")"));
if (j < length - 1)
stack_str = String::Concat(stack_str, String::NewSymbol("\n"));
if (!trace.IsEmpty()) {
Local<String> stack_str = String::Empty();
int length = trace->GetFrameCount();
for (int j = 0; j < length; j++) {
Local<StackFrame> frame = trace->GetFrame(j);

stack_str = String::Concat(stack_str, String::NewSymbol(" at "));
stack_str = String::Concat(stack_str, frame->GetFunctionName());
stack_str = String::Concat(stack_str, String::NewSymbol(" ("));
stack_str = String::Concat(stack_str, frame->GetScriptName());
stack_str = String::Concat(stack_str, String::NewSymbol(":"));
stack_str = String::Concat(stack_str,
Integer::NewFromUnsigned(frame->GetLineNumber())->ToString());
stack_str = String::Concat(stack_str, String::NewSymbol(":"));
stack_str = String::Concat(stack_str,
Integer::NewFromUnsigned(frame->GetColumn())->ToString());
stack_str = String::Concat(stack_str, String::NewSymbol(")"));
if (j < length - 1)
stack_str = String::Concat(stack_str, String::NewSymbol("\n"));
}
obj->Set(stack_symbol, stack_str);
}
obj->Set(stack_symbol, stack_str);
}

array->Set(i, obj);
Expand Down
14 changes: 9 additions & 5 deletions src/node_object_wrap.h
Expand Up @@ -27,16 +27,20 @@

namespace node {

extern bool use_debug_agent;

class ObjectWrap {
public:
ObjectWrap ( ) {
refs_ = 0;

// Capture the current stack trace so we know who created this wrapper
v8::HandleScope scope;
v8::Local<v8::StackTrace> trace =
v8::StackTrace::CurrentStackTrace(kFrameLimit, v8::StackTrace::kOverview);
trace_ = v8::Persistent<v8::StackTrace>::New(trace);
if (use_debug_agent) {
// Capture the current stack trace so we know who created this wrapper
v8::HandleScope scope;
v8::Local<v8::StackTrace> trace =
v8::StackTrace::CurrentStackTrace(kFrameLimit, v8::StackTrace::kOverview);
trace_ = v8::Persistent<v8::StackTrace>::New(trace);
}
}


Expand Down

0 comments on commit f0ba8ff

Please sign in to comment.