Hi, This is an implementation of a frame unwinder interface in the spirit of Alexander's work in this thread: http://thread.gmane.org/gmane.comp.gdb.patches/103360/focus=105202 No documentation yet, and I am still wondering how to test it appropriately. However it does seem some feedback could be useful before I document the wrong thing; particualarly I would like feedback on the changes to frame-unwind.c and frame.c. However happily it does work in V8; eliding some helpers, the implementation looks like this: (use-modules (gdb frame-unwinders)) (define (unwind-v8-frame frame) (let ((isolate (cached-current-isolate))) (when isolate (let* ((this-pc (ephemeral-frame-read-register frame "rip")) (this-fp (ephemeral-frame-read-register frame "rbp")) (code (lookup-code-for-pc this-pc isolate))) (when code (set-ephemeral-frame-id! frame this-fp (code-instruction-start code)) (let* ((type (if (code-optimized? code) 'javascript 'optimized)) (prev-pc-address (compute-standard-frame-pc-address this-fp)) (prev-sp (compute-frame-older-sp this-fp type)) (prev-fp (compute-standard-frame-older-fp this-fp)) (prev-pc (value-dereference prev-pc-address))) (ephemeral-frame-add-saved-register! frame "rsp" prev-sp) (ephemeral-frame-add-saved-register! frame "rbp" prev-fp) (ephemeral-frame-add-saved-register! frame "rip" prev-pc))))))) (define* (install-frame-unwinders #:optional (objfile (current-objfile))) (add-frame-unwinder! (make-frame-unwinder "guile-v8-frame-unwinder" unwind-v8-frame))) And most happily, it requires no changes in V8 itself. Yaaay :) With an appropriate frame filter, a backtrace looks like this: #0 0x00000d3c5b0661a1 in TestCase () at /hack/v8/test/mjsunit/debug-step-4-in-frame.js:94 #1 0x00000d3c5b06a3d3 in () at /hack/v8/test/mjsunit/debug-step-4-in-frame.js:112 #2 0x00000d3c5b02c620 in [internal frame] () #3 0x00000d3c5b014d31 in [entry frame] () #4 0x0000000000b4e949 in v8::internal::Invoke([...]) at ../src/execution.cc:128 #5 0x0000000000b4ed23 in v8::internal::Execution::Call([...]) at ../src/execution.cc:179 #6 0x0000000000a3f813 in v8::Script::Run([...]) at ../src/api.cc:1514 #7 0x0000000000a149fa in v8::Shell::ExecuteString([...]) at ../src/d8.cc:281 #8 0x0000000000a194eb in v8::SourceGroup::Execute([...]) at ../src/d8.cc:1213 #9 0x0000000000a1a128 in v8::Shell::RunMain([...]) at ../src/d8.cc:1448 #10 0x0000000000a1efdc in v8::Shell::Main([...]) at ../src/d8.cc:1721 #11 0x0000000000a1f143 in main([...]) at ../src/d8.cc:1757 instead of this: #0 0x00000d3c5b0661a1 in ?? () #1 0x0000000002404940 in ?? () #2 0x0000219b8fc5d779 in ?? () #3 0x000018a8ddbf01d9 in ?? () #4 0x0000219b8fc62a81 in ?? () #5 0x000018a8ddbf0179 in ?? () #6 0x00007fffffffd500 in ?? () #7 0x00000d3c5b06a3d3 in ?? () #8 0x00001df7db238fb1 in ?? () #9 0x0000000000000000 in ?? () Yaaaaaaaaaaay :) Regards, Andy