lwtrace_example5.cpp 885 B

123456789101112131415161718192021222324252627282930
  1. #include <library/cpp/lwtrace/all.h>
  2. #include <library/cpp/lwtrace/lwprobe.h>
  3. template <ui64 N>
  4. ui64 Fact() {
  5. ui64 result = N * Fact<N - 1>();
  6. #ifndef LWTRACE_DISABLE
  7. // Note that probe is create on the first pass
  8. // LWTRACE_DECLARE_PROVIDER and LWTRACE_DEFINE_PROVIDER are not needed
  9. // (Provider is created implicitly)
  10. static NLWTrace::TLWProbe<ui64> factProbe(
  11. "LWTRACE_EXAMPLE_PROVIDER", "FactProbe_" + ToString(N), {}, {"result"});
  12. LWPROBE_OBJ(factProbe, result);
  13. #endif // LWTRACE_DISABLE
  14. return result;
  15. }
  16. template <>
  17. ui64 Fact<0>() {
  18. return 1;
  19. }
  20. int main() {
  21. Fact<6>(); // First run is required to create probes we can use later in trace query
  22. NLWTrace::StartLwtraceFromEnv(); // parse trace query and create trace session
  23. Cout << Fact<6>() << Endl; // actually trigger probes
  24. return 0;
  25. }