Hello all: 

I am working on a project where I need to print the JS stack trace when a 
JS process becomes unresponsive. My approach involves setting a periodic 
alarm using the `alarm()` function, and in the timeout function, I attempt 
to print the JS stack trace.

I'm experiencing an issue where `v8::StackTrace::CurrentStackTrace` returns 
a frame count of 0 when invoked within the signal handler. I understand 
there could be some complications using the V8 API within a signal handler 
due to its asynchronous signal-unsafe nature. 

Here is a simplified version of my current approach:

// Assume isolate and context are correctly setup
void signalHandler(int signal) {
    // Try to get stack trace and print
    v8::HandleScope handleScope(isolate);
    v8::Local<v8::StackTrace> stackTrace = 
v8::StackTrace::CurrentStackTrace(
        isolate, 
        10, 
        v8::StackTrace::kDetailed
    );
    int frameCount = stackTrace->GetFrameCount();
    printf("Frame Count: %d\n", frameCount);
    // Iterate and print each frame here...
}

int main() {
    // Setup V8, isolate and context here...
    signal(SIGALRM, signalHandler);
    alarm(10);  // Set alarm
    // Rest of the program...
}


Is my approach flawed? Is there a safer or more effective method to achieve 
what I'm trying to do?

Thanks

-- 
-- 
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-dev/0e06f5e3-b37b-4bcc-a293-65d152b0938fn%40googlegroups.com.

Reply via email to