Giter Club home page Giter Club logo

exception-reporting's Introduction

This package is now a part of the core Atom repository, please direct all issues and pull requests there in the future!


Exception Reporting package

macOS Build Status Windows Build Status Dependency Status

Reports uncaught exceptions in Atom to bugsnag.

exception-reporting's People

Contributors

50wliu avatar ben3eee avatar damieng avatar daviwil avatar izuzak avatar jasonrudolph avatar kattrali avatar kevinsawicki avatar lee-dohm avatar mcolyer avatar mnquintana avatar peterdavehello avatar snmaynard avatar thedaniel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

exception-reporting's Issues

Absolute paths are preventing Bugsnag from grouping exceptions

Take a look at bugsnag and you'll see what I mean. We're getting the same exception reported separately in lots of cases due to too much variation in paths. We need to relativize all paths in stack traces based on the resourcePath if we can. Some won't be relative to the resource path and we can leave those absolute.

/cc @iolsen

Don't send dev mode errors

Exception are more "normal" in dev mode and maybe shouldn't be reported at all since throwing things is something done just for debugging purposes.

<unknown> is deprecated.

You have the core package "exception-reporting" installed as a community package. See https://github.com/atom/dalek for how this causes problems and instructions on how to correct the situation.

<unknown> (/usr/lib/atom/node_modules/dalek/lib/main.js:14:14)
Function.module.exports.Emitter.simpleDispatch (/usr/lib/atom/node_modules/event-kit/lib/emitter.js:25:14)
Emitter.emit (/usr/lib/atom/node_modules/event-kit/lib/emitter.js:141:28)
<unknown> (/usr/lib/atom/src/package-manager.js:506:32)

Collect recent errors and make them available

Currently when the dev tools pops up it only shows the top of the stack for the errors that were logged.

This can make it hard to tell which package caused it and you have to do the whole open the dev tools first, reproduce the error, get the stack dance.

So start collecting the last 10 or so and make the log-able from dev tools using something like printRecentErrors().

This method could even check the stack and tell you which package it came from by looking for ~/.atom/packages in the stack.

Exception when non-Error thrown

parseStackTrace attempts to use the thrown value as a key in the StackTraceCache WeakMap.

WeakMap keys must be Objects, while non-Objects may be thrown. If a non-Object is thrown the following stack trace is generated:

Error reporting uncaught exception TypeError: Invalid value used as weak map key
at WeakMap.set (native)
at parseStackTrace (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/exception-reporting/lib/reporter.js:115:23)
at shouldReport (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/exception-reporting/lib/reporter.js:102:20)
at Object.exports.reportUncaughtException (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/exception-reporting/lib/reporter.js:169:10)
at /Applications/Atom.app/Contents/Resources/app.asar/node_modules/exception-reporting/lib/main.js:21:27
at Function.module.exports.Emitter.simpleDispatch (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/event-kit/lib/emitter.js:25:14)
at Emitter.module.exports.Emitter.emit (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/event-kit/lib/emitter.js:125:28)
at /Applications/Atom.app/Contents/Resources/app.asar/src/atom-environment.js:832:32

Cannot read property 'ahead' of null

[Enter steps to reproduce below:]

1.installed svn package
2. clicked ctr + s

Atom Version: 1.9.1
System: Microsoft Windows 10 Pro
Thrown From: status-bar package, v1.4.0

Stack Trace

Uncaught TypeError: Cannot read property 'ahead' of null

At C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\pane.js:1026

TypeError: Cannot read property 'ahead' of null
    at status-bar-git.GitView.updateAheadBehindCount (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\node_modules\status-bar\lib\git-view.js:213:78)
    at status-bar-git.GitView.update (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\node_modules\status-bar\lib\git-view.js:171:12)
    at C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\node_modules\status-bar\lib\git-view.js:78:24
    at Function.module.exports.Emitter.simpleDispatch (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\node_modules\event-kit\lib\emitter.js:25:14)
    at Emitter.module.exports.Emitter.emit (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\node_modules\event-kit\lib\emitter.js:125:28)
    at TextBuffer.module.exports.TextBuffer.saveAs (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\node_modules\text-buffer\lib\text-buffer.js:1135:27)
    at TextBuffer.module.exports.TextBuffer.save (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\node_modules\text-buffer\lib\text-buffer.js:1105:19)
    at TextEditor.module.exports.TextEditor.save (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\text-editor.js:740:26)
    at Pane.module.exports.Pane.saveItem (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\pane.js:734:18)
    at Pane.saveItem (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\pane.js:3:61)
    at Pane.module.exports.Pane.saveActiveItem (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\pane.js:717:19)
    at Workspace.module.exports.Workspace.saveActivePaneItem (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\workspace.js:690:35)
    at atom-workspace.commandRegistry.add.core:save (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\register-default-commands.js:220:32)
    at CommandRegistry.module.exports.CommandRegistry.handleCommandEvent (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\command-registry.js:260:29)
    at C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\command-registry.js:3:61
    at KeymapManager.module.exports.KeymapManager.dispatchCommandEvent (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\node_modules\atom-keymap\lib\keymap-manager.js:580:16)
    at KeymapManager.module.exports.KeymapManager.handleKeyboardEvent (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\node_modules\atom-keymap\lib\keymap-manager.js:388:22)
    at WindowEventHandler.module.exports.WindowEventHandler.handleDocumentKeyEvent (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\window-event-handler.js:98:36)
    at HTMLDocument.<anonymous> (C:\Users\raj\AppData\Local\atom\app-1.9.1\resources\app.asar\src\window-event-handler.js:3:61)

Commands

     -0:06.0 core:save (atom-text-editor.editor.is-focused)

Config

{}

Installed Packages

# User
svn, v0.0.12 (active)
tortoise-svn, v0.5.0 (inactive)
atom-dark-syntax, v0.27.0 (inactive)
atom-dark-ui, v0.51.0 (inactive)
atom-light-syntax, v0.28.0 (inactive)
atom-light-ui, v0.43.0 (inactive)
base16-tomorrow-dark-theme, v1.1.0 (inactive)
base16-tomorrow-light-theme, v1.1.1 (inactive)
one-dark-ui, v1.3.2 (active)
one-light-ui, v1.3.2 (inactive)
one-dark-syntax, v1.2.0 (active)
one-light-syntax, v1.2.0 (inactive)
solarized-dark-syntax, v1.0.2 (inactive)
solarized-light-syntax, v1.0.2 (inactive)
about, v1.5.2 (active)
archive-view, v0.61.1 (active)
autocomplete-atom-api, v0.10.0 (active)
autocomplete-css, v0.11.1 (active)
autocomplete-html, v0.7.2 (active)
autocomplete-plus, v2.31.0 (active)
autocomplete-snippets, v1.11.0 (active)
autoflow, v0.27.0 (inactive)
autosave, v0.23.1 (active)
background-tips, v0.26.0 (active)
bookmarks, v0.41.0 (active)
bracket-matcher, v0.82.1 (active)
command-palette, v0.38.0 (inactive)
deprecation-cop, v0.54.1 (active)
dev-live-reload, v0.47.0 (active)
encoding-selector, v0.22.0 (active)
exception-reporting, v0.38.1 (active)
fuzzy-finder, v1.3.0 (active)
git-diff, v1.1.0 (active)
find-and-replace, v0.198.0 (inactive)
go-to-line, v0.31.0 (inactive)
grammar-selector, v0.48.1 (active)
image-view, v0.58.0 (active)
incompatible-packages, v0.26.1 (active)
keybinding-resolver, v0.35.0 (active)
line-ending-selector, v0.5.0 (active)
link, v0.31.1 (inactive)
markdown-preview, v0.158.0 (active)
metrics, v0.53.1 (active)
notifications, v0.64.1 (active)
open-on-github, v1.2.0 (inactive)
package-generator, v1.0.0 (inactive)
settings-view, v0.238.0 (active)
snippets, v1.0.2 (active)
spell-check, v0.67.1 (active)
status-bar, v1.4.0 (active)
styleguide, v0.46.0 (active)
symbols-view, v0.113.0 (inactive)
tabs, v0.98.0 (active)
timecop, v0.33.1 (active)
tree-view, v0.208.0 (active)
update-package-dependencies, v0.10.0 (active)
welcome, v0.34.0 (active)
whitespace, v0.32.2 (active)
wrap-guide, v0.38.1 (active)
language-c, v0.52.1 (active)
language-clojure, v0.21.0 (active)
language-coffee-script, v0.47.0 (active)
language-csharp, v0.12.1 (active)
language-css, v0.36.2 (active)
language-gfm, v0.86.0 (active)
language-git, v0.13.0 (active)
language-go, v0.42.0 (active)
language-html, v0.44.1 (active)
language-hyperlink, v0.16.0 (active)
language-java, v0.22.0 (active)
language-javascript, v0.119.0 (active)
language-json, v0.18.0 (active)
language-less, v0.29.3 (active)
language-make, v0.22.2 (active)
language-mustache, v0.13.0 (active)
language-objective-c, v0.15.1 (active)
language-perl, v0.35.0 (active)
language-php, v0.37.0 (active)
language-property-list, v0.8.0 (active)
language-python, v0.45.0 (active)
language-ruby, v0.68.5 (active)
language-ruby-on-rails, v0.25.0 (active)
language-sass, v0.52.0 (active)
language-shellscript, v0.22.3 (active)
language-source, v0.9.0 (active)
language-sql, v0.21.1 (active)
language-text, v0.7.1 (active)
language-todo, v0.28.0 (active)
language-toml, v0.18.0 (active)
language-xml, v0.34.8 (active)
language-yaml, v0.26.0 (active)

# Dev
No dev packages

Request: Indicate that package is looking for existing issue

I think its really cool, that the package checks if there is already an open issue on github. But the default button says Report Error and if you click it and the issue was in fact already reported, nothing happens. A good 2-3 seconds later the button changes to View Issue. I would appreciate it, if there was a visual indicator, that atom is searching online.

Uncaught TypeError: Path must be a string. Received ~

[Enter steps to reproduce:]

  1. Close an open tab
  2. ...

Atom: 1.14.1 x64
Electron: 1.3.13
OS: Mac OS X 10.12.3
Thrown From: exception-reporting package 0.40.2

Stack Trace

Uncaught TypeError: Path must be a string. Received undefined

At path.js:7

TypeError: Path must be a string. Received undefined
    at assertPath (path.js:7:11)
    at Object.join (path.js:1213:7)
    at Object.tildify (/app.asar/node_modules/exception-reporting/node_modules/fs-plus/lib/fs-plus.js:64:39)
    at /app.asar/node_modules/status-bar/lib/file-info-view.js:177:50)
    at /app.asar/node_modules/status-bar/lib/file-info-view.js:160:12)
    at /app.asar/node_modules/status-bar/lib/file-info-view.js:133:19)
    at /app.asar/node_modules/status-bar/lib/file-info-view.js:27:24
    at Function.module.exports.Emitter.simpleDispatch (/app.asar/node_modules/event-kit/lib/emitter.js:25:14)
    at Emitter.module.exports.Emitter.emit (/app.asar/node_modules/event-kit/lib/emitter.js:129:28)
    at /app.asar/src/pane-container.js:348:27
    at Function.module.exports.Emitter.simpleDispatch (/app.asar/node_modules/event-kit/lib/emitter.js:25:14)
    at Emitter.module.exports.Emitter.emit (/app.asar/node_modules/event-kit/lib/emitter.js:129:28)
    at Pane.module.exports.Pane.setActiveItem (/app.asar/src/pane.js:300:22)
    at Pane.module.exports.Pane.activateItemAtIndex (/app.asar/src/pane.js:435:19)
    at Pane.module.exports.Pane.activatePreviousItem (/app.asar/src/pane.js:400:21)
    at Pane.module.exports.Pane.removeItem (/app.asar/src/pane.js:585:16)
    at Pane.module.exports.Pane.destroyItem (/app.asar/src/pane.js:658:16)
    at TabBarView.module.exports.TabBarView.closeTab (/app.asar/node_modules/tabs/lib/tab-bar-view.js:333:26)
    at HTMLDivElement.TabView.didClickCloseIcon (/app.asar/node_modules/tabs/lib/tab-bar-view.js:222:19)

Commands

     -0:07.0 tree-view:show (atom-workspace.workspace.scrollbars-visible-when-scrolling.theme-one-dark-syntax.theme-atom-dark-ui)

Non-Core Packages

atom-beautify 0.29.17 
atom-fuzzy-grep 0.15.0 
atom-lcov 2.0.0 
atom-pair 2.0.10 
atom-yamljson 0.2.3 
cucumber 0.6.0 
docblockr 0.9.1 
docker 0.7.0 
dockerletion 0.2.0 
editorconfig 2.2.0 
ember-cli-helper 0.9.0 
ember-tabs 2.4.1 
file-icons 2.0.15 
git-plus 7.2.2 
git-projects 1.17.0 
git-tab-status 1.9.2 
git-time-machine 1.5.4 
go-debug 1.0.4 
go-plus 5.1.1 
go-signature-statusbar 1.2.0 
highlight-selected 0.12.0 
javascript-snippets 1.2.1 
language-babel 2.54.1 
language-chef 0.9.0 
language-cucumber 0.0.1 
language-docker 1.1.7 
linter 1.11.21 
linter-csslint 1.3.3 
linter-docker 0.1.4 
linter-eslint 8.1.0 
linter-js-yaml 1.2.6 
linter-jshint 3.0.2 
linter-jsonlint 1.3.0 
markdown-scroll-sync 2.1.2 
merge-conflicts 1.4.4 
pigments 0.39.0 
project-colorize 0.2.0 
project-plus 0.9.0 
regex-railroad-diagram 0.16.0 
sort-lines 0.14.0 
symbols-tree-view 0.13.2 
sync-settings 0.8.1 
tabs-to-spaces 1.0.3 
todo-show 1.9.0 

Fails to report error when stacktrace includes core JavaScript API

Description

When an exception occurs, and the stacktrace includes a core JavaScript API, the exception-reporting package fails to report the exception to bugsnag. For example, the stacktrace below involves an exception in the fuzzy-finder package, and the stacktrace includes a call to Array.forEach:

     ~/github/fuzzy-finder/lib/main.js:81 Uncaught Error
         at forEach (/Users/j/github/fuzzy-finder/lib/main.js:81:31)
===>     at Array.forEach (native)     <===
         at Object.createProjectView (/Users/j/github/fuzzy-finder/lib/main.js:81:9)
         at HTMLElement.fuzzy-finder:toggle-file-finder (/Users/j/github/fuzzy-finder/lib/main.js:12:14)
         at CommandRegistry.handleCommandEvent (/Applications/Atom.app/Contents/Resources/app/src/command-registry.js:384:49)
         at KeymapManager.module.exports.KeymapManager.dispatchCommandEvent      (/Applications/Atom.app/Contents/Resources/app/node_modules/atom-keymap/lib/keymap-manager.js:621:22)
         at KeymapManager.module.exports.KeymapManager.handleKeyboardEvent      (/Applications/Atom.app/Contents/Resources/app/node_modules/atom-keymap/lib/keymap-manager.js:412:28)
         at WindowEventHandler.handleDocumentKeyEvent (/Applications/Atom.app/Contents/Resources/app/src/window-event-handler.js:110:40)

When the exception-reporting package attempts to normalize the paths in the stacktrace, the package errors when it encounters Array.forEach in the stacktrace. Instead of reporting the exception to bugsnag, the package logs an error to the console:

Error reporting uncaught exception TypeError: Cannot read property 'replace' of null
    at Reporter.normalizePath (~/github/exception-reporting/lib/reporter.js:71:27)
    at Reporter.scrubPath (~/github/exception-reporting/lib/reporter.js:77:31)
    at ~/github/exception-reporting/lib/reporter.js:61:20
    at Array.map (native)
    at Reporter.buildStackTraceJSON (~/github/exception-reporting/lib/reporter.js:59:40)
    at Reporter.buildExceptionJSON (~/github/exception-reporting/lib/reporter.js:54:24)
    at Reporter.buildNotificationJSON (~/github/exception-reporting/lib/reporter.js:33:27)
    at Reporter.reportUncaughtException (~/github/exception-reporting/lib/reporter.js:229:30)
    at ~/github/atom/out/app/node_modules/exception-reporting/lib/main.js:25:23
    at Function.module.exports.Emitter.simpleDispatch (/Applications/Atom.app/Contents/Resources/app/node_modules/event-kit/lib/emitter.js:25:20)
    at Emitter.module.exports.Emitter.emit (/Applications/Atom.app/Contents/Resources/app/node_modules/event-kit/lib/emitter.js:141:34)
    at window.onerror (/Applications/Atom.app/Contents/Resources/app/src/atom-environment.js:949:26)
    at KeymapManager.module.exports.KeymapManager.dispatchCommandEvent (/Applications/Atom.app/Contents/Resources/app/node_modules/atom-keymap/lib/keymap-manager.js:621:22)
    at KeymapManager.module.exports.KeymapManager.handleKeyboardEvent (/Applications/Atom.app/Contents/Resources/app/node_modules/atom-keymap/lib/keymap-manager.js:412:28)
    at WindowEventHandler.handleDocumentKeyEvent (/Applications/Atom.app/Contents/Resources/app/src/window-event-handler.js:110:40)

Steps to Reproduce

  1. Clone the repository for another bundled package and apm link it. We'll use fuzzy-finder for this example:
    1. git clone atom/fuzzy-finder
    2. cd fuzzy-finder
    3. git checkout v1.8.1
    4. apm install && apm link
  2. In the fuzzy-finder code, edit main.js to trigger an error that has a core JavaScript API in the stacktrace:
    --- a/lib/main.js
    +++ b/lib/main.js
    @@ -78,6 +78,8 @@ module.exports = {
       },
    
       createProjectView () {
    +    [0].forEach(() => { throw new Error('whoops') })
    +
         this.stopLoadPathsTask()
    
         if (this.projectView == null) {
  3. Clone the atom/exception-reporting repository and apm link the package:
    1. git clone atom/exception-reporting
    2. cd exception-reporting
    3. git checkout v0.43.1
    4. apm install && apm link
  4. In the exception-reporting code, edit lib/reporter.js so that it will treat our local copy of fuzzy-finder as a bundled package for error reporting purposes:
    --- a/lib/reporter.js
    +++ b/lib/reporter.js
    @@ -253,7 +253,7 @@ export default class Reporter {
       }
    
       isBundledFile (fileName) {
    -    return this.normalizePath(fileName).indexOf(this.resourcePath) === 0
    +    return true
       }
    
       isTeletypeFile (fileName) {
  5. Open Atom
  6. Trigger the Fuzzy Finder: Toggle File Finder command to force the error above to be thrown

Expected behavior: Error should be successfully posted to bugsnag

Actual behavior: Error is not reported to bugsnag

Reproduces how often: 100%

Versions

exception-reporting 0.43.1

$ atom --version
Atom    : 1.27.0-dev-6dd878d
Electron: 1.7.11
Chrome  : 58.0.3029.110
Node    : 7.9.0

/cc @as-cii (since we encountered this issue while pairing today)

Should I publish my userId?

I noticed exception-reporting.userId is stored in my config.cson. I'd like to commit my config.cson to my dotfiles. Should I scrub my userId out first?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.