是否可以在 React Native 中获取错误的行号?

Posted

技术标签:

【中文标题】是否可以在 React Native 中获取错误的行号?【英文标题】:Is it possible to get the line number of an error in React Native? 【发布时间】:2019-10-25 00:06:11 【问题描述】:

我正在编写一个 React Native 应用程序,我发现 ios 模拟器生成的错误消息从未指示我的代码中发生错误的行。在下面的屏幕截图中,我可以看到这是Dashboard 组件中的map() 函数的问题,但是由于它没有给出行号,如果Dashboard 中有多个map() 实例,我不知道如何隔离哪个是抛出错误。 所以我的问题是

谁能解释一下为什么 React Native 在这种情况下不指示行号?这是 React Native 工作方式的固有属性吗?总是无法识别给定的行(如果是,请尽可能详细地解释原因)?或者有什么方法可以让我以不同的方式构建我的应用程序以显示错误的行号?

谢谢!

【问题讨论】:

SceneView.js 在第 6 行?也许它就在那里 SceneView.js 是一个包装文件,其中包含发生 map() 错误的 Dashboard 组件。它肯定在仪表板文件中。仪表板中 map() 的出现次数很少,我可以通过反复试验来解决问题;我只是想了解为什么它不会生成行号,以防我以后遇到更难自行隔离的问题。 你想要的是源地图。可以参考***.com/questions/34715106/… 另外值得注意的是,顶部文件甚至可能不包含错误,例如有时如果一个组件调用一个抛出错误的钩子,堆栈跟踪可能只显示组件的文件,甚至没有提到包含实际错误的钩子文件 @gkeenley,看看工具 Rollbar!在下面链接我的答案。 【参考方案1】:

大多数情况下的答案是否定的。

您在此处共享的屏幕对于了解错误的来源几乎没有什么用处。

您可以使用 react 本机调试器来获取有关状态/道具更改或任何异常的更多信息。堆栈跟踪也不会有太大帮助。您可以为开发环境编写自己的全局错误处理函数。另请记住,并非所有错误都是 JS 错误,有些错误也是由原生模块引发的。

您还可以设置断点并使用源选项卡进行运行时调试,或者您可以将整个脚本黑箱化,只要合适。 调试是 React Native 的主要缺点之一

【讨论】:

我遇到了和原帖一样的问题,而且 React Native Debugger 中的堆栈跟踪也没有包含实际发生错误的行号。 @stephen.hanson 从未显示确切的行号,因为代码在该实现或库中中断。 React 本机调试器控制台提供了代码可能在哪里中断的想法。尝试使用 console.log() 语句或在源选项卡中使用断点,或者您可以将整个脚本黑盒化,只要合适 我只是指出,正如您的回答所暗示的那样,我没有在 React Native Debugger 中获得更多信息。在 React Native 之外,javascript 堆栈跟踪确实显示了触发错误的确切行,因此 React Native 也可以这样做似乎是合理的。 @stephen.hanson 感谢您的反馈,已相应更新了答案。关于第二部分,react native stack traces 表现得像 JS 是有意义的,但不幸的是它不是那样工作的 哎呀,这真是个缺点......我很高兴我和 Swift 在一起。【参考方案2】:

答案可能是,使用名为Rollbar 的工具:

我并不是要推广任何工具,但是,这个似乎是免费的,因此可以被社区采用。它也确实捕获了错误的行号!

【讨论】:

老实说,我自己没用过,不过,好像能达到目的!

以上是关于是否可以在 React Native 中获取错误的行号?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从 React-Native 中的图像中获取二进制数据?

在 React Native 中获取 React CORS 预检错误

WebView(react-native-webview)在 Expo SDK36 中获取错误代码 -1

在 react-native 中获取数据时出现错误

在 React Native 中使用组件导入获取错误“元素类型无效预期字符串”

在 React-Native 中获取 FCM 令牌