如何以编程方式在 Android 上创建断点
How to create a breakpoint programmatically on Android
在 C# 中我可以写:
if(Debugger.IsAttached)
Debugger.Break();
当程序未被调试时,这不起作用。附加调试器后,它的行为就像一个永远无法关闭的断点。如何在 Android 上实现类似的效果?
或者我根本不应该关注断点。我真正想要的是在常规使用中没有任何后果(将向用户显示一般错误消息),但在开发人员开始查看它时让错误来源变得明显。我已经尝试过断言,但它是一个子项目,大部分时间都被编译为发布风格,我不能指望有人记得将其切换为调试。
如果我明白你的意思 - 试试这段代码:
if (BuildConfig.DEBUG) {
// Your, developers behavior
}
else {
// release behavior
}
我认为 Debug.isDebuggerConnected()
就是您要找的。这将 return true
仅当应用程序启动时附加了调试器,否则 false
,无论 build type
还是 flavor
。不幸的是,我不认为您可以通过编程方式停止执行,但是使用上述指令您应该能够显示错误消息或抛出异常。就个人而言,我正在考虑这样的事情:
if (Debug.isDebuggerConnected()) {
// throw an exception for the developer with a detailed message
} else {
// show the general error message to the user with a dialog/toast
}
我也希望这可以完成,但我还没有找到任何合理的方法来以编程方式使调试器断点。我为解决此问题所做的工作是使用方法调用 "br" 创建一个断点 class。当我调试时,我会在 "br" 方法中设置一个断点。之后,每当我的代码调用 "br" 方法时,调试器就会停止。然后我退出该方法,然后检查调用 "br" 方法的程序的状态。希望对您有所帮助!
在 C# 中我可以写:
if(Debugger.IsAttached)
Debugger.Break();
当程序未被调试时,这不起作用。附加调试器后,它的行为就像一个永远无法关闭的断点。如何在 Android 上实现类似的效果?
或者我根本不应该关注断点。我真正想要的是在常规使用中没有任何后果(将向用户显示一般错误消息),但在开发人员开始查看它时让错误来源变得明显。我已经尝试过断言,但它是一个子项目,大部分时间都被编译为发布风格,我不能指望有人记得将其切换为调试。
如果我明白你的意思 - 试试这段代码:
if (BuildConfig.DEBUG) {
// Your, developers behavior
}
else {
// release behavior
}
我认为 Debug.isDebuggerConnected()
就是您要找的。这将 return true
仅当应用程序启动时附加了调试器,否则 false
,无论 build type
还是 flavor
。不幸的是,我不认为您可以通过编程方式停止执行,但是使用上述指令您应该能够显示错误消息或抛出异常。就个人而言,我正在考虑这样的事情:
if (Debug.isDebuggerConnected()) {
// throw an exception for the developer with a detailed message
} else {
// show the general error message to the user with a dialog/toast
}
我也希望这可以完成,但我还没有找到任何合理的方法来以编程方式使调试器断点。我为解决此问题所做的工作是使用方法调用 "br" 创建一个断点 class。当我调试时,我会在 "br" 方法中设置一个断点。之后,每当我的代码调用 "br" 方法时,调试器就会停止。然后我退出该方法,然后检查调用 "br" 方法的程序的状态。希望对您有所帮助!