如何禁用React-Native中的远程JS调试

51

我知道正常关闭调试的方式是进入开发者菜单。问题在于,自从我打开了我正在测试的应用程序(React Native和Android模拟器)的调试功能之后,在应用程序加载时我一直看到白屏,控制台上没有任何信息,也无法访问开发者菜单以关闭调试。

所以我陷入了困境。由于JS调试似乎针对应用程序,我假设还有其他地方可以关闭它,可能在模拟器或React中。

请指教? 谢谢


1
我刚刚发现这是用于从命令行adb shell input keyevent 82打开开发菜单的。问题是,我仍然什么都没有得到,就好像应用程序只是挂起了。 - Gotts
1
多年过去了,这个问题仍然出现。我的情况是因为我通过ngrok访问了API。一个“解决方案”是从设备应用程序管理器中清除Expo Go的缓存数据,但应该以更好的方式发布。 - Carmine Tambascia
26个回答

49

我之前遇到了类似的问题——远程调试初始化导致我的应用程序崩溃,而我无法通过应用程序内GUI禁用远程调试。

在将应用程序从设备(或模拟器)中卸载后,重新启动应用程序时会自动禁用远程调试。

我认为,远程调试标志保存在应用程序的共享首选项中(这些首选项在卸载后被删除)。


3
这应该是被接受的答案。我不明白为什么其他类似的答案会被downvote。 Ctrl/Cmd + M无法使用是因为应用程序卡住了,OP说了这个问题(而且我也遇到了同样的问题)... 当你(意外地)打开远程调试时,它会存储在应用程序中。重置整个模拟器是不必要的,只需卸载应用程序并重新构建即可。我没有找到更快的解决方案。 - effeKtSVK
我和你遇到了完全相同的问题,谢谢!为什么得到35个赞的答案在底部呢? - Scientist1642
1
@Scientist1642 我也是。该死的,我不明白为什么当我按下远程JS调试时,我的应用程序会崩溃并且无法再次启动。这花费了我大量的时间,幸运的是找到了这个答案。 - Nam Lê Quý
这有点过度了。在Android中,只需清除应用程序数据和缓存即可。重新加载后,远程调试将消失。 - alfx
我尝试了很多方法,但都不起作用。重启应用程序也不行,重新安装AVD模拟器也不行,通过运行expo --clear来重置缓存也不行... - Pencilcheck

28

如果您正在使用 Windows 操作系统:按下 ctrl + m,Mac OS 操作系统:按下 cmd + m,iPhone/安卓设备:摇晃您的设备 ,然后查找"禁用远程调试JS" 并单击它。


2
按下 cmd + d 然后禁用远程调试器。 - loekTheDreamer
3
cmd + m 只是最小化窗口。cmd + d 才是做到这一点的方法,感谢 @loekTheDreamer。 - Sergey Katranuk
这个回答不相关,你可能需要更新一下。cmd + m 只是最小化窗口。 - Muteshi

22

前往安卓设备的设置,清除应用数据和缓存,重新加载应用程序,远程调试将会被关闭。


难道没有不禁用调试器的解决方案吗?我需要在调试模式下运行以查看日志。 - ThinkAndCode

12
将这段代码添加到你的应用程序入口点。
import { NativeModules } from 'react-native';
NativeModules.DevSettings.setIsDebuggingRemotely(false);

这是一个文档不完善的低级函数,它将强制使远程调试处于一种状态。一旦您解决了问题,我建议您删除此行代码,因为它可能会在某些奇怪的情况下导致您的应用程序进入循环并/或吞噬错误。


11

我也遇到了使用Expo应用程序时的同样问题。该应用程序无法启动,无法访问开发人员菜单,并且在调试远程JS时会导致应用程序崩溃。对于我来说最简单和最快速的解决方案是清除Expo中的应用数据


在2022年,使用SDK 45,它仍然能够工作,谢谢。 - devseo
一个荒谬的问题,但至少你的解决方案可行,谢谢。 - Rok Sprogar
3
如果您能说明在Expo中如何清除应用程序数据,那就太好了。 - csstudent1418

8

对我来说(在Mac上),唯一有效的方法是去菜单栏,点击“模拟器(Simulator)”然后选择“重置内容和设置(Reset Content and Settings...)”。这确实会重置所有的内容和设置。


1
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - OmG
3
@OmG:这对你没起作用吗?当我这样做时,它确实重置了调试,从而禁用了它。我没有找到其他任何让我执行请求的选项。如果有什么需要我澄清的,请告诉我。 - knod
这个方法对我很有效,其他解决方案都没有起作用,谢谢。 - Shaun Wilson
我认为可以选择 SHAKE 而不是重置内容... 在同一菜单中,您可以选择 SHAKE,这将在模拟器中显示 ActionSheet(调试菜单)。从那里,您可以禁用调试。 - Jaime Sangcap

6

针对那些在使用iOS模拟器的Mac用户无法执行⌘D,因为某些错误使你卡在错误界面上的情况,你可以通过^⌘z在模拟器上模拟晃动。这将强制展开模拟器上的expo选项架,并且你可以禁用调试器,在修复完问题后重新进入应用程序,避免再次陷入调试器中。


这应该是MacOS用户的最佳答案。 - rmlarsen

5

在 Mac 上:运行 react-native for ios 后,前往

模拟器->硬件->抹掉所有内容和设置

然后前往 Vscode,

无调试运行

这使得热重载对我起作用。


5
抱歉晚了,但这将有助于未来的用户。如果你遇到此问题,请卸载你的移动设备或模拟器上的expo客户端应用,重新安装expo应用程序即可解决问题。

5

在模拟器上按下Ctrl+M,然后停止调试。


2
对我来说这不起作用。它什么也没做。调试器还在运行。 - jlguenego
是的,我也一样。我无法终止这个东西。 - JCraine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接