[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Managing debug logging in complex transforms: what

Subject: Re: Managing debug logging in complex transforms: what do people do?
From: Brian Chrisman <brchrisman@xxxxxxxxx>
Date: Mon, 24 Mar 2014 11:42:04 -0700
Re:  Managing debug logging in complex transforms: what
fpr what my opinion is worth, I generally do a few things:
- have debugging everywhere and strip debug elements/attributes after
output with a separate transform
- preprocess the stylesheet, inserting debug logging (I think one
example was when there was an apply-templates, for-each, or something
similar with parent::xsl:copy, then preprocessor would add an
xsl:attribute with the attribute in a debug namespace ahead of the
instruction with the value count(@select)... or I might've just
polluted the attribute axis, I can't remember this one...)
- I try to split my transforms into smaller pipelined units, so I can
view intermediate result documents (for me, everything except code
generators starts with an identity template, and I split the
commuting/commutative transform elements as much as possible)

(caveat: mostly for data sizes much smaller than available memory)
(caveat: all my work has been in 1.0 though I'm picking up 2.0 stuff,
going through novachev's pluralsight course right now and have found
it to be an excellent resource)

- Brian


I like to keep debug outside of my code as much as possible...

On Mon, Mar 24, 2014 at 10:31 AM, Eliot Kimber <ekimber@xxxxxxxxxxxx> wrote:
> For whatever reason I find using interactive debugging unhelpful for
> debugging XSLT processing (but I couldn't code a line of Java without it).
>
> Thus I depend very heavily on debug messages in my XSLTs. I used to just
> emit messages and then comment them out or delete them when I was done,
> but then I found myself recreating those messages when I had to return to
> that bit of code.
>
> Then I started using a runtime parameter to turn debugging on or off
> globally and using IF checks to output my messages. But that results in a
> lot of messages when you've got a lot of debug messages, most of which are
> not relevant to your current problem, so back to commenting things out or
> disabling the IF check (e.g., test="false() and $doDebug").
>
> Lately I've been trying the technique of using a tunnel parameter to
> communicate the debug state to each template or function, which lets me
> selectively turn on debugging within a given code path, e.g.:
>
> <!-- Global variable set from runtime parameter -->
>
> <xsl:variable name="doDebug" as="xs:boolean"
>   select="matches($debug, '(true|yes|1|on)', 'i')"
> />
>
> <xsl:template match="/">
>   <xsl:param name="doDebug" as="xs:boolean"
>     tunnel="yes"
>     select="$doDebug"
>   />
>
>   <xsl:apply-templates>
>    <xsl:param name="doDebug" as="xs:boolean"
>     tunnel="yes"
>     select="$doDebug"/>
>   </xsl:apply-templates>
> </xsl:template>
>
> <xsl:template match="foo">
>   <xsl:param name="doDebug" as="xs:boolean"
>      tunnel="yes"
>      select="false()"
>   />
>
> </xsl:template>
>
>
> Because you can shadow a parameter within a template, you can create a
> doDebug variable within a template to turn debugging on or off and that
> setting will propagate to the descendant templates.
>
> This approach is working well to make it easier for me to control my
> debugging dynamically and more easily focus my messaging. But it adds some
> overhead to the code in that you need the debug parameter and with-param
> everywhere, which isn't that big of a deal to add but still.
>
> My question: is there a better way to do this? Am I overlooking some
> feature of XSLT 2 (or 3) that would make managing debugging messages
> easier? Should I step up to a more complete messaging framework that
> mirrors e.g., log4j?
>
> This is in the context of quite complex transforms with multiple phases,
> lots of twisty logic, non-obvious stuff, and so on, as opposed to workaday
> HTML- and FO-generation transforms, for which this level of sophistication
> is not usually required.
>
> Thanks,
>
> Eliot
>
> ----------
> Eliot Kimber, Owner
> Contrext, LLC
> http://contrext.com

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.