mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-11 10:12:00 +08:00
57 lines
1.4 KiB
CoffeeScript
57 lines
1.4 KiB
CoffeeScript
|
#!/usr/bin/env coffee
|
||
|
# Usage:
|
||
|
# Copy the crash log into pasteboard and then run
|
||
|
# pbpaste | ./script/translate-crash-log-addresses.coffee
|
||
|
|
||
|
atos = (addresses, callback) ->
|
||
|
path = require 'path'
|
||
|
exec = require('child_process').exec
|
||
|
|
||
|
cwd = path.join __dirname, '..'
|
||
|
exec 'atos -o cef/Release/libcef.dylib -arch i386 '.concat(addresses...), cwd: cwd, (error, stdout, stderr) ->
|
||
|
throw error if error?
|
||
|
callback stdout.split('\n')
|
||
|
|
||
|
parse_stack_trace = (raw) ->
|
||
|
lines = {}
|
||
|
addresses = []
|
||
|
for line in raw
|
||
|
columns = line.split /\ +/
|
||
|
if columns[1] == 'libcef.dylib' and /0x[a-f0-9]+/.test columns[3]
|
||
|
lines[columns[0]] = addresses.length
|
||
|
addresses.push '0x' + parseInt(columns[5]).toString(16) + ' '
|
||
|
|
||
|
atos addresses, (parsed) ->
|
||
|
for line in raw
|
||
|
columns = line.split /\ +/
|
||
|
frame = columns[0]
|
||
|
if lines[frame]?
|
||
|
console.log frame, parsed[lines[frame]]
|
||
|
else
|
||
|
console.log line
|
||
|
|
||
|
parse_log_file = (content) ->
|
||
|
state = 'start'
|
||
|
stack_trace = []
|
||
|
lines = content.split /\r?\n/
|
||
|
|
||
|
for line in lines
|
||
|
if state == 'start'
|
||
|
if /Thread \d+ Crashed::/.test line
|
||
|
console.log line
|
||
|
state = 'parse'
|
||
|
else if state == 'parse'
|
||
|
break if line == ''
|
||
|
stack_trace.push line
|
||
|
|
||
|
parse_stack_trace stack_trace
|
||
|
|
||
|
input = ''
|
||
|
process.stdin.resume()
|
||
|
process.stdin.setEncoding 'utf8'
|
||
|
process.stdin.on 'data', (chunk) ->
|
||
|
input += chunk
|
||
|
process.stdin.on 'end', ->
|
||
|
parse_log_file input
|
||
|
|