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