On Nov 2, 5:50 am, Smaug <[EMAIL PROTECTED]> wrote:
> On 11/2/08 7:14 AM, [EMAIL PROTECTED] wrote:
>
> > Hi,
>
> > I am trying to use GetCSSStyleRules() of inDOMUtils to find all the
> > style rule of an element
>
> > nsIDOMElement* aElement; // points to an element in the DOM
>
> > inDOMUtils domUtils;
> > nsCOMPtr<nsISupportsArray> rules;
> > domUtils.GetCSSStyleRules(aElement, getter_AddRefs(rules));
>
> > But in some cases, my program crashes with the following segmentation
> > fault:
> > (gdb) bt
> > #0 0xb41bd463 in ns_if_addref<nsIStyleRule*> (expr=0xdddddddd)
> > at ../../dist/include/xpcom/nsISupportsUtils.h:114
> > #1 0xb41bca8d in nsInspectorCSSUtils::GetRuleNodeRule
> > (this=0xa4419c8,
> > aNode=0x9db0e74, aRule=0xbfc88924)
> > at /firefox3.0.3/mozilla/layout/style/nsInspectorCSSUtils.cpp:88
> > #2 0xb46b7779 in inDOMUtils::GetCSSStyleRules (this=0xbfc88ab4,
> > aElement=0x9c8a3dc, _retval=0xbfc88b10)
> > at /firefox3.0.3/mozilla/layout/inspector/src/inDOMUtils.cpp:180
>
> > Can someone please tell me why my program crashes? I am pretty sure
> > the element I pass to the GetCSSStyleRules() in inDOMUtils is a valid
> > pointer. This is because I print out the tag name of the element. And
> > the tag name is valid.
>
> > Thank you for any pointers.
>
> If you could post some code and perhaps a bit longer stack trace.
> Does something keep aElement alive? I mean some nsCOMPtr variable.
Thank you for your response, Smaug.
Here is my code, it basically walk thru the dom and call
domUtils.GetCSSStyleRules() of the element.
Here is the code to walk the dom:
void DOMWalker2::doWalkDOM(nsIDOMNSHTMLElement* element,
nsIDOMHTMLDocument* htmlDomDoc, int level) {
if (element) {
nsCOMPtr<nsIDOMNode> domNode =
do_QueryInterface(const_cast<nsIDOMNSHTMLElement*>(element));
if (domNode) {
nsCOMPtr<nsIDOMElement> domElement = do_QueryInterface(element);
if (domElement) {
rule.postSerializeStart(domElement, NULL);
nsCOMPtr<nsIDOMNode> childNode;
nsCOMPtr<nsIDOMNode> siblingNode;
domNode->GetFirstChild(getter_AddRefs(childNode));
while (childNode) {
nsCOMPtr<nsIDOMNSHTMLElement> childElement =
do_QueryInterface(childNode);
if (childElement) {
doWalkDOM(childElement, htmlDomDoc, level+1);
}
childNode->GetNextSibling(getter_AddRefs(siblingNode));
childNode = siblingNode;
}
}
}
}
}
And here is how I call
void CSSElmRule2::postSerializeStart(nsIDOMElement* domElement, FILE*
fd) {
nsAutoString tagName;
aElement->GetTagName(tagName);
printf("css style tagname %s\n",
NS_ConvertUTF16toUTF8(tagName).get());
inDOMUtils domUtils;
nsCOMPtr<nsISupportsArray> rules;
// It crashes here: But it does not always crashes. Only crashes
when i load some
// big pages, e.g. cnn.com
domUtils.GetCSSStyleRules(aElement, getter_AddRefs(rules));
}
Here is a long stack trace:
(gdb) bt
#0 0xb5a14483 in ns_if_addref<nsIStyleRule*> (expr=0xdddddddd)
at ../../dist/include/xpcom/nsISupportsUtils.h:114
#1 0xb5a13aad in nsInspectorCSSUtils::GetRuleNodeRule
(this=0x9e3e7b0,
aNode=0x8d19918, aRule=0xbffc4e64)
at /media/storage/working/firefox3.0.3/mozilla/layout/style/
nsInspectorCSSUtils.cpp:88
#2 0xb5f0ee05 in inDOMUtils::GetCSSStyleRules (this=0xbffc4fe4,
aElement=0x9386c94, _retval=0xbffc5020)
at /media/storage/working/firefox3.0.3/mozilla/layout/inspector/
src/inDOMUtils.cpp:180
#3 0xb5bbba37 in CSSElmRule2::processCSSStyle (this=0xbffc58d4,
aElement=0x9386c94)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/CSSElmRule2.cpp:56
#4 0xb5bbbd1c in CSSElmRule2::postSerializeStart (this=0xbffc58d4,
domElement=0x9386c94, fd=0x0)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/CSSElmRule2.cpp:25
#5 0xb5bbb6cb in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x94950b8,
htmlDomDoc=0x90adaac, level=22)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:78
#6 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494fc0,
htmlDomDoc=0x90adaac, level=21)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#7 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x938c798,
htmlDomDoc=0x90adaac, level=20)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#8 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9e38c10,
htmlDomDoc=0x90adaac, level=19)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#9 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494fa8,
htmlDomDoc=0x90adaac, level=18)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#10 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494f70,
htmlDomDoc=0x90adaac, level=17)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#11 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494f38,
htmlDomDoc=0x90adaac, level=16)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#12 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494f00,
htmlDomDoc=0x90adaac, level=15)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#13 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494e68,
htmlDomDoc=0x90adaac, level=14)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#14 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9493d00,
htmlDomDoc=0x90adaac, level=13)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#15 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9493cc8,
htmlDomDoc=0x90adaac, level=12)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#16 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9493b70,
htmlDomDoc=0x90adaac, level=11)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#17 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9493b58,
htmlDomDoc=0x90adaac, level=10)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#18 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9d7eeb0,
htmlDomDoc=0x90adaac, level=9)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#19 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9d7ee98,
htmlDomDoc=0x90adaac, level=8)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#20 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494508,
htmlDomDoc=0x90adaac, level=7)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#21 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494470,
htmlDomDoc=0x90adaac, level=6)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#22 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x94943d8,
htmlDomDoc=0x90adaac, level=5)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#23 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494300,
htmlDomDoc=0x90adaac, level=4)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#24 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x94942c8,
htmlDomDoc=0x90adaac, level=3)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#25 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494290,
htmlDomDoc=0x90adaac, level=2)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#26 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9494218,
htmlDomDoc=0x90adaac, level=1)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#27 0xb5bbb7a5 in DOMWalker2::doWalkDOM (this=0xbffc58d0,
element=0x9e41990,
htmlDomDoc=0x90adaac, level=0)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:92
#28 0xb5bbb59d in DOMWalker2::walkDOM (this=0xbffc58d0,
element=0x9e41990,
htmlDomDoc=0x90adaac, level=0)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMWalker2.cpp:63
#29 0xb5b9a04a in DOMSerializerIDOMEventListener::HandleEvent (
this=0x9039ad8, aEvent=0x9e406d4)
at /media/storage/working/firefox3.0.3/mozilla/content/serializer/
src/DOMSerializerIDOMEventListener.cpp:171
#30 0xb5bca247 in nsEventListenerManager::HandleEventSubType
(this=0x90e6f10,
aListenerStruct=0x93bda90, aListener=0x9039ad8,
aDOMEvent=0x9e406d4,
aCurrentTarget=0x8f8d4c4, aPhaseFlags=6)
at /media/storage/working/firefox3.0.3/mozilla/content/events/src/
nsEventListenerManager.cpp:1080
#31 0xb5bca6b7 in nsEventListenerManager::HandleEvent
(this=0x90e6f10,
aPresContext=0x0, aEvent=0xbffc5c8c, aDOMEvent=0xbffc5bec,
aCurrentTarget=0x8f8d4c4, aFlags=6, aEventStatus=0xbffc5bf0)
at /media/storage/working/firefox3.0.3/mozilla/content/events/src/
nsEventListenerManager.cpp:1185
#32 0xb5bf8455 in nsEventTargetChainItem::HandleEvent
(this=0x9e41c90,
[EMAIL PROTECTED], aFlags=6)
at /media/storage/working/firefox3.0.3/mozilla/content/events/src/
nsEventDispatcher.cpp:210
#33 0xb5bf86e5 in nsEventTargetChainItem::HandleEventTargetChain (
this=0x9e41cb0, [EMAIL PROTECTED], aFlags=6, aCallback=0x0)
at /media/storage/working/firefox3.0.3/mozilla/content/events/src/
nsEventDispatcher.cpp:268
#34 0xb5bf8f60 in nsEventDispatcher::Dispatch (aTarget=0x8f8d488,
aPresContext=0x0, aEvent=0xbffc5c8c, aDOMEvent=0x0,
aEventStatus=0x0,
aCallback=0x0)
at /media/storage/working/firefox3.0.3/mozilla/content/events/src/
nsEventDispatcher.cpp:483
#35 0xb5b0f53c in nsDocument::DispatchEventToWindow (this=0x90ad8c8,
aEvent=0xbffc5c8c)
at /media/storage/working/firefox3.0.3/mozilla/content/base/src/
nsDocument.cpp:5792
#36 0xb5b0f87c in nsDocument::OnPageShow (this=0x90ad8c8,
aPersisted=0)
at /media/storage/working/firefox3.0.3/mozilla/content/base/src/
nsDocument.cpp:5820
#37 0xb58690e2 in DocumentViewerImpl::LoadComplete (this=0x90ae400,
aStatus=0)
at /media/storage/working/firefox3.0.3/mozilla/layout/base/
nsDocumentViewer.cpp:1007
#38 0xb5612967 in nsDocShell::EndPageLoad (this=0x8f3d938,
aProgress=0x8f3d94c, aChannel=0x9082f60, aStatus=0)
at /media/storage/working/firefox3.0.3/mozilla/docshell/base/
nsDocShell.cpp:5100
#39 0xb56432d4 in nsWebShell::EndPageLoad (this=0x8f3d938,
aProgress=0x8f3d94c, channel=0x9082f60, aStatus=0)
at /media/storage/working/firefox3.0.3/mozilla/docshell/base/
nsWebShell.cpp:1013
#40 0xb561b7e0 in nsDocShell::OnStateChange (this=0x8f3d938,
aProgress=0x8f3d94c, aRequest=0x9082f60, aStateFlags=131088,
aStatus=0)
at /media/storage/working/firefox3.0.3/mozilla/docshell/base/
nsDocShell.cpp:5005
#41 0xb565f3a1 in nsDocLoader::FireOnStateChange (this=0x8f3d938,
aProgress=0x8f3d94c, aRequest=0x9082f60, aStateFlags=131088,
aStatus=0)
at /media/storage/working/firefox3.0.3/mozilla/uriloader/base/
nsDocLoader.cpp:1235
#42 0xb5660127 in nsDocLoader::doStopDocumentLoad (this=0x8f3d938,
request=0x9082f60, aStatus=0)
at /media/storage/working/firefox3.0.3/mozilla/uriloader/base/
nsDocLoader.cpp:858
#43 0xb5660331 in nsDocLoader::DocLoaderIsEmpty (this=0x8f3d938)
at /media/storage/working/firefox3.0.3/mozilla/uriloader/base/
nsDocLoader.cpp:763
#44 0xb5662313 in nsDocLoader::ChildDoneWithOnload (this=0x8f3d938,
aChild=0x9463808)
at /media/storage/working/firefox3.0.3/mozilla/uriloader/base/
nsDocLoader.h:205
#45 0xb566035f in nsDocLoader::DocLoaderIsEmpty (this=0x9463808)
at /media/storage/working/firefox3.0.3/mozilla/uriloader/base/
nsDocLoader.cpp:766
#46 0xb5660ad6 in nsDocLoader::OnStopRequest (this=0x9463808,
aRequest=0x93d86e8, aCtxt=0x0, aStatus=0)
at /media/storage/working/firefox3.0.3/mozilla/uriloader/base/
nsDocLoader.cpp:679
#47 0xb6285d8f in nsLoadGroup::RemoveRequest (this=0x9463548,
request=0x93d86e8, ctxt=0x0, aStatus=0)
at /media/storage/working/firefox3.0.3/mozilla/netwerk/base/src/
nsLoadGroup.cpp:688
#48 0xb5b0d658 in nsDocument::DoUnblockOnload (this=0x97fe550)
at /media/storage/working/firefox3.0.3/mozilla/content/base/src/
nsDocument.cpp:5741
#49 0xb5b0fd67 in nsDocument::UnblockOnload (this=0x97fe550,
aFireSync=1)
at /media/storage/working/firefox3.0.3/mozilla/content/base/src/
nsDocument.cpp:5690
#50 0xb5b55969 in ~Event (this=0x97ed9c0)
at /media/storage/working/firefox3.0.3/mozilla/content/base/src/
nsImageLoadingContent.cpp:788
#51 0xb70d9854 in nsRunnable::Release (this=0x97ed9c0) at
nsThreadUtils.cpp:51
#52 0xb714d18a in ~nsCOMPtr (this=0xbffc65d4)
at ../../dist/include/xpcom/nsCOMPtr.h:583
#53 0xb714be71 in nsThread::ProcessNextEvent (this=0x8a211d0,
mayWait=0,
result=0xbffc6618)
at /media/storage/working/firefox3.0.3/mozilla/xpcom/threads/
nsThread.cpp:523
#54 0xb70d93af in NS_ProcessPendingEvents_P (thread=0x8a211d0,
timeout=20)
at nsThreadUtils.cpp:180
#55 0xb4ea454d in nsBaseAppShell::NativeEventCallback (this=0x8f1bf68)
at /media/storage/working/firefox3.0.3/mozilla/widget/src/
xpwidgets/nsBaseAppShell.cpp:121
#56 0xb4e79d48 in nsAppShell::EventProcessorCallback
(source=0x8f1a758,
condition=G_IO_IN, data=0x8f1bf68)
at /media/storage/working/firefox3.0.3/mozilla/widget/src/gtk2/
nsAppShell.cpp:69
#57 0xb77806fd in ?? () from /usr/lib/libglib-2.0.so.0
#58 0xb77496f8 in g_main_context_dispatch () from /usr/lib/
libglib-2.0.so.0
#59 0xb774cda3 in ?? () from /usr/lib/libglib-2.0.so.0
#60 0xb774d2c2 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#61 0xb7c263a9 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#62 0x0804e78a in main (argc=1, argv=0xbffc7924)
at /media/storage/working/firefox3.0.3/mozilla/embedding/browser/
gtk/tests/TestGtkEmbed.cpp:401
Thank you very much for your help again.
_______________________________________________
dev-tech-layout mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-layout