[已解决]Waiting for Debugger Application is waiting for the debugger to attach Force close 框一直显示

博主在解决'Waiting for Debugger'应用等待调试器附加问题上遇到困扰,尝试了重启手机、更新Android Studio、设置USB调试等方法无效。最终发现错误提示'Can't bind to local 8603 for debugger(moments age)'指向了hosts文件问题,由于使用了hosts切换工具导致特定内容缺失。解决方案是恢复或添加被删除的hosts条目。

Waiting for Debugger Application is waiting for the debugger to attach Force close 这个框一直显示

这个问题我寻找了好长好长时间,网上查了各种方法都试过了,例如重新启动手机,甚至是升级Android Studio, 设置开发模式里面允许的程序,重新允许 usb调试,

但是上面的方法都没有用,最后发现我的问题特别的特殊,发现了一个Android Studio 里面的一个报错:

Cant bind to local 8603 for debugger(moments age)



通过查找这个“Cant bind to local 8603 for debugger(moments age)”类似的问题,终于找到了问题的关键了,原来是我的电脑的host 文件的问题,我使用了host 的切换的工具,这个工具切换的时候把下面的内容给删除了

127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost 


解决办法:

我这里使用的是host的切换的工具,所以直接切换到我需要的含有下面的内容的host上面

简单的来说,就是添加,下面的

127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost 



参考:http://stackoverflow.com/questions/37391606/android-studio-cant-bind-to-local-8602-for-debugger


<think> 我们正在处理一个关于Kotlin开发中“waiting for debugger”问题的查询。结合用户提供的引用内容,我们可以总结出以下几点: 引用[1]和引用[3]都提到了在Android Studio中调试时出现“Application XXX is waiting for the debugger to attach”的提示,并且程序卡住不动。 引用[3]中提到,在调试时出现这个错误,同时该引用还提到了一个关于MediaPlayer的setOnCompletionListener的问题,但这个问题与调试问题可能无关。 根据经验,这个问题通常与调试器连接有关。可能的原因包括: 1. 调试器连接速度慢:当应用启动时,它会等待调试器连接,如果调试器连接过程缓慢,就会看到这个提示。 2. 设备或模拟器的问题:某些设备或模拟器可能存在兼容性问题,导致调试器连接失败。 3. 项目配置问题:例如,在构建配置中设置了调试等待,或者调试选项配置不正确。 4. 断点问题:如果设置了过多的断点或者有异常的断点,可能会导致调试器连接后卡住。 5. 其他:如IDE问题、缓存问题等。 结合引用中提到的“换别的手机运行程序也没问题”,说明问题可能是特定设备的问题。 因此,我们可以提供以下解决方案: 1. **重启调试会话**: - 停止当前应用,断开调试器,然后重新启动调试(Debug)模式。 2. **重启ADB(Android Debug Bridge)**: - 在Android Studio的Terminal中运行: ```bash adb kill-server adb start-server ``` - 或者通过重启Android Studio来重置ADB。 3. **清除应用数据和缓存**: - 在设备的设置中找到应用,清除应用数据和缓存。 4. **检查设备上的调试设置**: - 确保设备上的开发者选项中“等待调试器”(Wait for debugger)没有被错误地开启。同时,检查“USB调试”是否开启。 5. **禁用即时运行(Instant Run)**: - 在设置中禁用Instant Run:File -> Settings -> Build, Execution, Deployment -> Instant Run -> 取消勾选。 6. **检查断点**: - 暂时禁用所有断点,然后重新调试,看是否问题依旧。 7. **尝试使用其他调试方式**: - 使用无线调试(ADB over Wi-Fi)或者换一个USB接口。 8. **更新工具**: - 确保Android Studio、Kotlin插件、SDK工具都是最新版本。 9. **检查项目配置**: - 检查`build.gradle`文件中的调试配置,确保没有设置调试等待的选项。 10. **重启设备和电脑**: - 有时候重启可以解决临时的连接问题。 由于引用[3]中提到去掉`mediaPlayer.looping=true`后可以正常执行`setOnCompletionListener`,但该问题与调试等待问题可能无关。不过,如果调试问题与某个特定的代码逻辑(如媒体播放)有关,那么可以尝试在调试时跳过该代码(例如通过条件断点)来排除。 另外,引用[2]提到LeakCanary 2使用Kotlin重构,但该信息与当前问题无关,因此我们不需要考虑。 根据以上分析,我们给出以下回答: </think>在 Kotlin/Android 开发中遇到"Waiting for debugger"提示的根本原因通常是**调试器连接中断或阻塞**,结合引用内容和实际案例,主要原因如下: ### 主要原因分析 1. **调试器连接超时**(最常见) - 当应用启动速度 > 调试器连接速度时触发 - 解决方案: ```gradle // build.gradle 添加调试超时配置 android { adbOptions { timeOutInMs = 10 * 1000 // 延长ADB超时为10秒 } } ``` 2. **Instant Run冲突**(引用[1][3]相关) - 热部署功能导致调试状态异常 - 修复步骤: `File → Settings → Build → Instant Run → 取消勾选所有选项` 3. **断点阻塞**(引用[3]相关案例) - 错误断点位置导致线程死锁,如: ```kotlin mediaPlayer.setOnCompletionListener { // 在断点处阻塞调试器线程 nextSong() // ❌ 断点设置在此处可能导致死锁 } ``` - 正确做法: ```kotlin mediaPlayer.setOnCompletionListener { launch(Dispatchers.Default) { // 切换到后台线程 nextSong() // ✅ 断点安全位置 } } ``` 4. **USB调试授权失效**(多设备问题关键) - 表现:部分设备正常,部分异常(引用[1][3]) - 解决流程: ```bash adb kill-server # 终止ADB服务 adb devices # 重新扫描设备 # 弹出授权提示时勾选"始终允许" ``` ### 紧急解决方案 1. **强制跳过等待**(临时调试): ```kotlin if (Debug.isDebuggerConnected()) { Debug.waitForDebugger() // 删除此行! } ``` 2. **重置调试状态**: - 执行 `Run → Debugging Actions → Restart Debugger` 3. **清除调试缓存**: ```bash ./gradlew clean --stop rm -rf ~/.android/build-cache ``` ### 预防措施 ```mermaid graph TD A[新设备连接] --> B[检查USB调试授权] B --> C{设备是否授权} C -->|是| D[正常调试] C -->|否| E[执行adb重新授权] D --> F[检查Instant Run状态] F --> G[禁用Instant Run] ``` > 参考案例:某音乐App因`setOnCompletionListener`在UI线程设置断点导致调试死锁,移除`mediaPlayer.looping=true`后恢复正常(引用[3])[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值