安卓调试器不在断点处停止

64

我在控制台中看到调试语句,但是调试器没有停在任何断点上。我尝试清除所有断点并重新添加它们,但不确定为什么会出现这种情况。


我的解决方案是重新安装Eclipse。可能的较弱解决方案是:清理工作区(删除所有Eclipse文件并从生成的项目中导入;清理项目,重启Eclipse)。 - Gangnus
14个回答

75

适用于我的解决方案:

  • 只需从设备上(在设备上手动)卸载应用程序,然后再尝试调试!

你做不比那更容易 =) - Patapoom
1
没错!在新手机上,我尝试了运行然后调试。之后断点停止工作了。从手机上卸载应用程序并重新运行调试模式后,断点再次开始工作。 - maniek099
1
我已经使用Android Studio多年了,从来没有遇到过这种情况。不知道发生了什么变化,但我刚刚尝试卸载它,结果成功了!谢谢! - Cowabunghole
尝试使用@Kaz的解决方案——“将调试器附加到Android进程”,它可能会帮助你避免这个问题。 - VectorVictor
这对我来说甚至在Flutter中也适用。 - Kirtikumar A.
显示剩余2条评论

57
如果您使用Android Studio,请点击debug app而不是run app

输入图像描述


2
我真傻!+1。这应该是被接受的答案。Android Studio警告你不要在应用程序清单中放置android:debuggable="true",这是被接受的答案建议的做法。 - RBT

27
根据这个答案,在您的应用程序模块的build.gradle中,禁用minifyEnable以针对您的构建变体,并将其更改为false。然后,它应该是:
minifyEnabled false
否则,当在断点标记上悬停时,您将看到类xxxx中无法使用行号,并且它们将带有一个十字标记。

我要补充的是,当我悬停在断点上时,我没有看到提到的消息。不起作用的断点上缺少一个小勾号,基本上使它们成为一个纯红色的圆圈,而工作正常的断点则有这个勾号。 - Max Hille

19
你是否在AndroidManifest中设置了可调试标志? 如果遗漏了,请在应用程序标签中添加android:debuggable="true"。 最终应该看起来像这样:
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">

9
在我的情况下,这并没有帮助:-( - Gangnus
3
@ Wooff你应该把那个发成一个单独的答案。 :) - MustModify
2
Android Studio不再支持此标志。 - Zdravko Donev
@Gangnus,你找到任何解决方案了吗? - Bhunnu Baba
1
@BhunnuBaba 是的,重新安装Eclipse。较弱的解决方案是:清理工作区(删除所有Eclipse文件并从生成的项目中导入;清理项目,重启Eclipse)。 - Gangnus
显示剩余3条评论

15

在我的情况下,点击"附加调试器到Android进程"

然后它将显示一个窗口,上面写着"选择进程"。选择你正在使用的设备,并选择要调试的项目。这样就可以了。

有时,在第一次打开调试器时,调试器需要重新附加到设备上。


10

对于Android Studio:

  • 检查是否错误地启用了选项Mute Breakpoints。图标如下所示:

Android debug toolbar

对于Eclipse:

  • 检查是否错误地启用了选项"Skip All Breakpoints"。这是以下工具栏中的最后一个图标skip-all icon

eclipse toolbar


1
在Android Studio中,我在哪里可以找到这个选项? - saga
在Android Studio中,“Mute Breakpoints”选项位于Debug视图中。请检查我的编辑答案。 - Kushal

5
你是否使用了“调试为->Android应用程序”而不是“运行为”?只有使用“调试为”选项,Eclipse 才会在断点处停止。

3

我也遇到了同样的问题。 请前往 build.gradle 文件。 如果你有一个,你必须更改这段代码。

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
    debug {
        debuggable true
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

调试(Debug)部分应该长得像这样:

buildTypes {
    release {
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
    debug {
        debuggable true
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

我希望您的问题已经得到解决。

1
如果您在build.gradle中添加了一些build type,请检查是否将debuggable true
buildTypes {
    debug {
        debuggable true
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    } 

    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

我没有调试配置,但是添加像上面那样的一个解决了我的问题。 - rwst

1
在我的情况下,该应用程序使用 android:process=":service"在AndroidManifest中创建了一个不同进程的服务。因此,我在服务进程代码中设置断点,而调试器会自动附加到主应用程序进程上。这很愚蠢,但它可能会帮助其他人。
您可以使用Run>Attach Debugger To Android Process将其附加到服务进程,并选择服务进程。如果您无法手动及时附加,请在服务进程代码中添加android.os.Debug.waitForDebugger();
据我所知,没有办法告诉Android Studio或IntelliJ在运行之前自动连接到不同的进程。

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