xref: /aosp_15_r20/external/pytorch/torch/csrc/utils/cpp_stacktraces.cpp (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1 #include <torch/csrc/utils/cpp_stacktraces.h>
2 
3 #include <cstdlib>
4 #include <cstring>
5 
6 #include <c10/util/Exception.h>
7 
8 namespace torch {
9 namespace {
compute_cpp_stack_traces_enabled()10 bool compute_cpp_stack_traces_enabled() {
11   auto envar = std::getenv("TORCH_SHOW_CPP_STACKTRACES");
12   if (envar) {
13     if (strcmp(envar, "0") == 0) {
14       return false;
15     }
16     if (strcmp(envar, "1") == 0) {
17       return true;
18     }
19     TORCH_WARN(
20         "ignoring invalid value for TORCH_SHOW_CPP_STACKTRACES: ",
21         envar,
22         " valid values are 0 or 1.");
23   }
24   return false;
25 }
26 
compute_disable_addr2line()27 bool compute_disable_addr2line() {
28   auto envar = std::getenv("TORCH_DISABLE_ADDR2LINE");
29   if (envar) {
30     if (strcmp(envar, "0") == 0) {
31       return false;
32     }
33     if (strcmp(envar, "1") == 0) {
34       return true;
35     }
36     TORCH_WARN(
37         "ignoring invalid value for TORCH_DISABLE_ADDR2LINE: ",
38         envar,
39         " valid values are 0 or 1.");
40   }
41   return false;
42 }
43 } // namespace
44 
get_cpp_stacktraces_enabled()45 bool get_cpp_stacktraces_enabled() {
46   static bool enabled = compute_cpp_stack_traces_enabled();
47   return enabled;
48 }
49 
compute_symbolize_mode()50 static torch::unwind::Mode compute_symbolize_mode() {
51   auto envar_c = std::getenv("TORCH_SYMBOLIZE_MODE");
52   if (envar_c) {
53     std::string envar = envar_c;
54     if (envar == "dladdr") {
55       return unwind::Mode::dladdr;
56     } else if (envar == "addr2line") {
57       return unwind::Mode::addr2line;
58     } else if (envar == "fast") {
59       return unwind::Mode::fast;
60     } else {
61       TORCH_CHECK(
62           false,
63           "expected {dladdr, addr2line, fast} for TORCH_SYMBOLIZE_MODE, got ",
64           envar);
65     }
66   } else {
67     return compute_disable_addr2line() ? unwind::Mode::dladdr
68                                        : unwind::Mode::addr2line;
69   }
70 }
71 
get_symbolize_mode()72 unwind::Mode get_symbolize_mode() {
73   static unwind::Mode mode = compute_symbolize_mode();
74   return mode;
75 }
76 
77 } // namespace torch
78