Skip to content

Don’t show stack traces to ordinary users #1798

@wchargin

Description

@wchargin

Don’t show stack traces to ordinary users

If TensorBoard dies with an exception, that exception is typically
displayed as a stack trace plus error message. This isn’t very friendly:

$ tensorboard
Traceback (most recent call last):
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/bin/tensorboard", line 10, in <module>
    sys.exit(run_main())
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/tensorboard/main.py", line 62, in run_main
    app.run(tensorboard.main, flags_parser=tensorboard.configure)
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/absl/app.py", line 294, in run
    flags_parser,
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/absl/app.py", line 351, in _run_init
    flags_parser=flags_parser,
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/absl/app.py", line 213, in _register_and_parse_flags_with_usage
    args_to_main = flags_parser(original_argv)
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/tensorboard/program.py", line 182, in configure
    loader.fix_flags(flags)
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/tensorboard/plugins/core/core_plugin.py", line 461, in fix_flags
    raise ValueError('A logdir or db must be specified. '
ValueError: A logdir or db must be specified. For example `tensorboard --logdir mylogdir` or `tensorboard --db sqlite:~/.tensorboard.db`. Run `tensorboard --helpfull` for details and examples.

or:

$ tensorboard --logdir . --host wat
Traceback (most recent call last):
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/bin/tensorboard", line 10, in <module>
    sys.exit(run_main())
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/tensorboard/main.py", line 62, in run_main
    app.run(tensorboard.main, flags_parser=tensorboard.configure)
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/absl/app.py", line 300, in run
    _run_main(main, args)
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/absl/app.py", line 251, in _run_main
    sys.exit(main(argv))
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/tensorboard/program.py", line 209, in main
    server = self._make_server()
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/tensorboard/program.py", line 245, in _make_server
    return self.server_class(app, self.flags)
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/tensorboard/program.py", line 298, in __init__
    super(WerkzeugServer, self).__init__(host, flags.port, wsgi_app)
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/werkzeug/serving.py", line 577, in __init__
    self.address_family), handler)
  File "/usr/lib/python2.7/SocketServer.py", line 417, in __init__
    self.server_bind()
  File "/usr/local/google/home/wchargin/virtualenv/tf-nightly-20190201-py2.7/local/lib/python2.7/site-packages/tensorboard/program.py", line 373, in server_bind
    super(WerkzeugServer, self).server_bind()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind
    SocketServer.TCPServer.server_bind(self)
  File "/usr/lib/python2.7/SocketServer.py", line 431, in server_bind
    self.socket.bind(self.server_address)
  File "/usr/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.gaierror: [Errno -2] Name or service not known

We can improve on this wall of text by adding a top-level exception
handler that just prints the error message (the last line in the above
block). We may want to also save the stack trace to a file somewhere in
case the user does want to debug it (e.g., they’re a TensorBoard
developer).

(c/o @manivaradarajan)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions