Always return 0-based columns from parseErrorStack

Summary:
Fixes a bug where we were skewing some stack traces by sending 1-based column numbers to the Metro symbolication endpoint, which expects them to be 0-based. This is achieved by subtracting 1 from the column numbers we find in textual stack traces, which are almost universally 1-based in current JS engines.

The bug is only noticeable in *some* cases, namely where the column immediately following the correct one is in a different function.

NOTE: The behaviour under Hermes was fixed separately, in a previous commit. This fix applies to other engines (e.g. JSC).

Changelog: [General] [Fixed] - Fix stack traces showing the wrong function name in some cases

Reviewed By: cpojer

Differential Revision: D18628230

fbshipit-source-id: 5677803500e45a41c1005496d19c150526af2d07
This commit is contained in:
Moti Zilberman 2019-12-02 06:00:09 -08:00 коммит произвёл Facebook Github Bot
Родитель 75d03b56fa
Коммит 60b4ba16c0
1 изменённых файлов: 4 добавлений и 1 удалений

Просмотреть файл

@ -57,7 +57,10 @@ function parseErrorStack(e: ExtendedError): Array<StackFrame> {
? e.stack
: global.HermesInternal
? convertHermesStack(parseHermesStack(e.stack))
: stacktraceParser.parse(e.stack);
: stacktraceParser.parse(e.stack).map(frame => ({
...frame,
column: frame.column != null ? frame.column - 1 : null,
}));
return stack;
}