Open Bug 819765 Opened 12 years ago Updated 2 years ago

DumpJSStack() doesn't show native frames

Categories

(Core :: JavaScript Engine, defect)

x86
Windows XP
defect

Tracking

()

People

(Reporter: neil, Unassigned)

References

Details

(Keywords: regression)

I was trying to debug what I at the time was a strange bug in UI code, and managed to set a breakpoint at the function that was going wrong. I wanted to see how the function had been reached so I got the debugger to invoke DumpJSStack() for me. However the stack frames made no sense until it dawned on me that there were some C++ stack frames in between. Previous versions of Gecko used to print a placeholder where control flow entered and exited C++.

Example:
--- native frame missing here ---
0 set_label() ["chrome://global/content/bindings/general.xml":0]
    this = [object XULElement @ 0xbb87630 (native @ 0xb133ee0)]
1 anonymous() ["chrome://messenger/content/mailWindow.js":341]
    this = [object Object]
--- native frame missing here ---
2 loadStartPage() ["chrome://messenger/content/mailWindow.js":491]
    this = [object ChromeWindow]
3 FolderPaneSelectionChange() ["chrome://messenger/content/commandglue.js":839]
    this = [object ChromeWindow]
4 onselect() ["chrome://messenger/content/messenger.xul":1]
    this = [object XULElement @ 0xb64f9e0 (native @ 0xaa45d70)]
--- native frame missing here ---
5 ChangeSelection() ["chrome://messenger/content/msgMail3PaneWindow.js":1278]
    this = [object ChromeWindow]
6 SelectFolder() ["chrome://messenger/content/msgMail3PaneWindow.js":1401]
    this = [object ChromeWindow]
7 loadStartFolder() ["chrome://messenger/content/msgMail3PaneWindow.js":890]
    this = [object ChromeWindow]
JS::FormatStackDump has switch from FrameRegsIter-like iteration to ScriptFrameIter which only iterate on script frames.  One of the problem is that FormatFrame function use the pc() function, which is meaning less on non-scripted frames.

NB: FormatFrame should be renamed StackFrame::dump, and handle any frame which can be encoded in a StackFrame.  StackIter should provide a function dump, and a function dumpStack for replacing JS::FormatStackDump.
Depends on: 959818
Assignee: general → nobody
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.