Hi Michael, Ok, now I understand what you originally wanted. I was thinking that you want either trimmed information to hide stack trace details, or want working XSLT debugger which is not realistic at this state (as I'm not working on sys.xml and primarily working on web service related stuff, except for important bug fixes).
Your patch shows interesting error information and I'd love to get this functionality in svn. But I don't think it should be "always" shown to users. An immediate concern example is that since XSLT could be designed to work recursively, this detailed information could be hundreds of lines. Also this patch ends up to hide exact problematic code location. So I think something like environment variable should be used to "enable" this detailed report. Atsushi Eno Michael Meeks wrote: > Hi dudie, > > So - of course this builds the frames on the exception - we could of > course alternatively dump them to Debug.WriteLine [ or perhaps something > easier to get at for the hacker without re-compiling mono ]. > > Either way, this turns my 100 line, unreadable barf into the appended, > which I hope is much more useful (?) > > Patch attached, what do you think ? I'll try to catch you tomorrow on > IRC to chew it over (?) :-) > > Thanks, > > Michael. > > [ERROR][/tmp/tst.docx] Conversion failed - Error during conversion > [DEBUG][/tmp/tst.docx] Error during processing: at > zip://localhost/word/document.xml(2,3076). from > xsl:template > child::http://schemas.openxmlformats.org/wordprocessingml/2006/main:p at > assembly://localhost/content.xsl(336,46) from > xsl:template > child::http://schemas.openxmlformats.org/wordprocessingml/2006/main:p at > assembly://localhost/content.xsl(244,29) from > xsl:template > child::http://schemas.openxmlformats.org/wordprocessingml/2006/main:tc at > assembly://localhost/tables.xsl(80,30) from > xsl:template > child::http://schemas.openxmlformats.org/wordprocessingml/2006/main:tr at > assembly://localhost/tables.xsl(57,30) from > xsl:template > child::http://schemas.openxmlformats.org/wordprocessingml/2006/main:tbl at > assembly://localhost/tables.xsl(37,31) from > xsl:template at assembly://localhost/content.xsl(55,32) from > xsl:template self::node-type [Root]()/child::urn:oox:source at (51,6)( at > Mono.Xml.Xsl.XslTemplate.Evaluate (Mono.Xml.Xsl.XslTransformProcessor p, > System.Col > lections.Hashtable withParams) [0x0010a] in > /data/mono/mcs/class/System.XML/Mono.Xml.Xsl/XslTemplate.cs:412 > at Mono.Xml.Xsl.XslTransformProcessor.ApplyTemplates > (System.Xml.XPath.XPathNodeIterator nodes, System.Xml.XmlQualifiedName mode, > System.Collections.ArrayLi > st withParams) [0x0002e] in > /data/mono/mcs/class/System.XML/Mono.Xml.Xsl/XslTransformProcessor.cs:244 > at Mono.Xml.Xsl.Operations.XslApplyTemplates.Evaluate > (Mono.Xml.Xsl.XslTransformProcessor p) [0x0005a] in > /data/mono/mcs/class/System.XML/Mono.Xml.Xsl.Opera > tions/XslApplyTemplates.cs:105 > at Mono.Xml.Xsl.Operations.XslTemplateContent.Evaluate > (Mono.Xml.Xsl.XslTransformProcessor p) [0x0002a] in > /data/mono/mcs/class/System.XML/Mono.Xml.Xsl.Oper > ations/XslTemplateContent.cs:193 > at Mono.Xml.Xsl.Operations.XslChoose.Evaluate > (Mono.Xml.Xsl.XslTransformProcessor p) [0x00047] in > /data/mono/mcs/class/System.XML/Mono.Xml.Xsl.Operations/Xs > lChoose.cs:92 > at Mono.Xml.Xsl.Operations.XslTemplateContent.Evaluate > (Mono.Xml.Xsl.XslTransformProcessor p) [0x0002a] in > /data/mono/mcs/class/System.XML/Mono.Xml.Xsl.Oper > ations/XslTemplateContent.cs:193 > at Mono.Xml.Xsl.XslTemplate.Evaluate (Mono.Xml.Xsl.XslTransformProcessor p, > System.Collections.Hashtable withParams) [0x000ca] in > /data/mono/mcs/class/Syste > m.XML/Mono.Xml.Xsl/XslTemplate.cs:403 ) > Done. > > > > > ------------------------------------------------------------------------ > > Index: class/System.XML/System.Xml.Xsl/XsltException.cs > =================================================================== > --- class/System.XML/System.Xml.Xsl/XsltException.cs (revision 67841) > +++ class/System.XML/System.Xml.Xsl/XsltException.cs (working copy) > @@ -64,6 +64,7 @@ > int lineNumber; > int linePosition; > string sourceUri; > + string xsltFrames; > > #endregion > > @@ -132,7 +133,10 @@ > > public override string Message { > get { > - return base.Message; > + string msg = base.Message; > + if (xsltFrames != null) > + msg += xsltFrames; > + return msg; > } > } > > @@ -157,6 +161,11 @@ > info.AddValue ("sourceUri", sourceUri); > } > > + public void appendXsltFrame( string msg ) > + { > + xsltFrames += msg; > + } > + > #endregion > } > } > Index: class/System.XML/Mono.Xml.Xsl/XslStylesheet.cs > =================================================================== > --- class/System.XML/Mono.Xml.Xsl/XslStylesheet.cs (revision 67841) > +++ class/System.XML/Mono.Xml.Xsl/XslStylesheet.cs (working copy) > @@ -66,6 +66,7 @@ > > // stylesheet attributes > string version; > + string baseURI; > XmlQualifiedName [] extensionElementPrefixes; > XmlQualifiedName [] excludeResultPrefixes; > ArrayList stylesheetNamespaces = new ArrayList (); > @@ -111,6 +112,10 @@ > get { return version; } > } > > + public string BaseURI { > + get { return baseURI; } > + } > + > public XslStylesheet () > { > } > @@ -121,6 +126,8 @@ > > templates = new XslTemplateTable (this); > > + baseURI = c.Input.BaseURI; > + > // move to root element > while (c.Input.NodeType != XPathNodeType.Element) > if (!c.Input.MoveToNext ()) > Index: class/System.XML/Mono.Xml.Xsl/XslTemplate.cs > =================================================================== > --- class/System.XML/Mono.Xml.Xsl/XslTemplate.cs (revision 67841) > +++ class/System.XML/Mono.Xml.Xsl/XslTemplate.cs (working copy) > @@ -350,11 +360,19 @@ > c.Input.MoveToParent (); > } > } > - > + > + void accumulateFrames(XsltException ex) > + { > + XslCompiledElementBase op = (XslCompiledElementBase) > content; > + ex.appendXsltFrame(" from\nxsl:template " + Match + " at " > + > + style.BaseURI + "(" + op.LineNumber + > "," + op.LinePosition + ")"); > + } > + > public virtual void Evaluate (XslTransformProcessor p, > Hashtable withParams) > { > p.PushStack (stackSize); > > + try { > if (parameters != null) { > if (withParams == null) { > int len = parameters.Count; > @@ -374,10 +398,20 @@ > } > } > } > - > + > if (content != null) > content.Evaluate (p); > > + } catch (XsltException ex) { > + accumulateFrames (ex); > + throw ex; > + } catch (Exception ex) { > + XsltException e = new XsltException ("Error during XSLT > processing: ", > + null, p.CurrentNode); > + accumulateFrames (e); > + throw e; > + } > + > p.PopStack (); > } > public void Evaluate (XslTransformProcessor p) _______________________________________________ Mono-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-list
