4
$\begingroup$

Suppose MyApp`Func1 is a function inside the package MyApp. How do I prevent Trace[Func1[x]] from displaying everything inside Func1 (or what's inside any MyApp functions)?

SetAttributes[MyApp`Func1, {ReadProtected, Locked}] appears to do the job. but then I can't modify options of Func1 with SetOptions.

$\endgroup$
3
  • $\begingroup$ What do want Trace[Func1[x]] to display if not the functions that are called inside it? After all, that's what Trace is for. $\endgroup$
    – m_goldberg
    Commented Jul 23, 2017 at 6:00
  • $\begingroup$ Why can't you? Unless you set it Protected there should be no problem. $\endgroup$
    – Kuba
    Commented Jul 23, 2017 at 6:12
  • $\begingroup$ It sounds like you know the solution: use a different public Symbol for the Options, and pass those to the Locked function that you don't want read. $\endgroup$
    – Mr.Wizard
    Commented Jul 23, 2017 at 6:59

1 Answer 1

5
$\begingroup$

Just use the TraceOff option:

Func1[x_] := 2+2
Trace[Func1[x], TraceOff->_Func1]

{Func1[x],4}

If you want to kill off tracing of a whole package, you could use something like:

Trace[expr, TraceOff -> (h_[___] /; Context[h]==="MyApp`")]
$\endgroup$
2
  • $\begingroup$ That is very helpful. Do you know how to use the related $TraceOff symbol? I tried setting it to the pattern you suggested, but it didn't work for me. $\endgroup$
    – QuantumDot
    Commented Jul 23, 2017 at 20:39
  • $\begingroup$ Doing $TraceOff=patt; Trace[expr] will not work because Trace sets $TraceOff to None (the default value of TraceOff). $\endgroup$
    – Carl Woll
    Commented Jul 23, 2017 at 22:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.