Hi Iwan, IMHO it is more a design issue than a tool issue. If you need to know exactly where a boolean expression is decided, You might have to implement a boolean algebra interpreter. You could even describe your questions in xml format, to be interpreted by a recursive function against your hardware corpus. That way you could implement rules like : All ancestors are ‘and’ operators and my current node is ‘false’ => ‘false’ All ancestors are ‘or’ operators’ and my current node is ‘true’ => ‘true’ And detect exactly where your expression is decided. This make me think of the MarkLogic stored query feature. Sorry I just thought about that a few minutes, I hope it helps, Best regards, Fabrice De : BaseX-Talk [mailto:basex-talk-bounces@mailman.uni-konstanz.de] De la part de Iwan Briquemont Envoyé : mercredi 27 juin 2018 23:04 À : basex-talk@mailman.uni-konstanz.de Objet : [basex-talk] Tracing query execution Hello, I use BaseX mostly for boolean queries, I have a hardware database and I check if specific hardware support features I need. It works great but when something is not as expected, it's hard to find out the reason. E.g. given an expression like: $some-value = $some-list and (custom:predicate() or $x > $y) I would like to know why it's true or false. For now I add trace() manually on the subexpressions, rerun, add trace to more specific parts, etc. Ideally I would want to break down the query execution so it shows the values of subparts of the query to pinpoint why it is false, e.g. have an output like: $some-value = $some-list and (custom:predicate() or $x > $y) -> false() $some-value = $some-list -> true() $some-value -> 1 $some-list -> (1, 2, ..., 10) custom:predicate() or $x > $y -> false() custom:predicate() -> false() ... # It should also go inside the function $x > $y -> false() $x -> 10 $y -> 11 Any ideas how it could be achieved? Looking at the code, maybe a debug() (like iter() or item()) method could be added to Expr objects which would trace the expression query, file, line and the result of the expression (or probably the first x characters of the result to avoid huge output)? With an xquery function which would trigger it. I also thought of modifying the query programmatically to add trace() calls but that seems overly complicated. Best regards, Iwan