【问题标题】:Is it possible to watch variables at runtime?是否可以在运行时观察变量?
【发布时间】:2015-10-16 14:29:47
【问题描述】:

我了解调试的基础知识,并且我知道我可以将监视添加到变量中,以在给定条件下停止程序的执行。但是我不想每次需要查看变量的值时都停止程序。我也不想将每个相关变量的值记录到 logcat 中......我只想像在断点处那样查看它们的值,只在运行时。

我正在 Android Studio 中编写 Android 程序。

感谢您的帮助!

【问题讨论】:

  • 没有日志没有断点,我认为这是不可能的,或者你必须把 textview 放在某个地方并更新该值运行时间,这将显示你的变量值..但是为什么这种类型的要求?
  • 谢谢。这是一种个人调试方法,我只是想知道它是否可能。正如我所说,将日志分配给我需要知道的每个变量在紧张的日程安排中可能会带来压力。另外,我刚刚进入我现在的工作,并且我必须支持我没有构建的软件...... IMO 我建议的方法可能是富有成效的。毕竟我不是资深专业人士,所以我可能错了。

标签: android debugging testing android-studio runtime


【解决方案1】:

当您的程序在断点处停止时,单击调试器菜单最右侧的图标(见下图)。您可以在此窗口中输入方法或变量名称,看看它们会是什么。

您可以键入任何您喜欢的表达式(只要它在您破坏代码的范围内)并输入任何硬编码的值或对象,而无需重新运行您的项目。

将变量添加到您的观察列表

首先在您想要查看特定变量的类中放置一个断点。运行代码,一旦它从“变量”窗口框架中命中断点,您应该会看到所有可访问的变量。只需选择您要观看的节目,然后右键单击并从下拉菜单中选择“添加到手表”。

继续调试,您应该会根据您的代码在适当的时候从 Watches 窗口框架中看到变量更新。

【讨论】:

  • 感谢您的回答。我知道表达式评估器,我只是想在程序运行时使用它,而不是在断点处停止。这就是我想采用的方法。对不起,如果我不够清楚。
  • 我已经更新了我的答案以包括观察变量。恐怕这与您将能够达到您所追求的目标一样接近。
  • 我的调试器只显示这个变量。没有显示方法变量。有什么建议吗?
  • 在 mac 上的表达式求值器中搜索时显示“找不到局部变量 'xxxxx'”
  • @developer1011 确保您的应用程序 build.gradle 文件中的 testCoverageEnabled 设置为 false。
【解决方案2】:

是的,你可以!

根据Android Dev Summit '19,您可以通过在断点中禁用Suspended 标志轻松做到这一点。

然后您可以在每次获取断点时将日志消息评估到控制台,而无需暂停!

如您所见,我的应用程序每次到达我的断点时都会向控制台触发一个日志。

换句话说,您可以在运行时查看变量的变化!

【讨论】:

  • 从未停下来查看该功能。从现在开始它会帮助我,谢谢你!
【解决方案3】:

如果您了解调试的基础知识,则可以轻松地将监视添加到变量中,以在给定条件下停止程序的执行。如果您不想在每次想要查看变量值时都停止程序,那么查看变量值的简单方法是使用 Toasts。 Toast 在一个小的弹出窗口中提供操作中任何变量的样本值。 Toast 会在设置的超时后自动消失。

一个简单的代码示例:

Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
toast.show();

为了查看 Toast 中的变量值:

   int var=1;
   Toast.makeText(getApplicationContext(), "vlaue is "+var, Toast.LENGTH_LONG).show();

为了查看 Toast 中的变量类型:

   Toast.makeText(getApplicationContext(), "type is "+var.getClass().getName(), Toast.LENGTH_LONG).show();

【讨论】:

  • 这是解决问题的一种创造性和实用性的方法,谢谢!我当时的问题是是否有办法在 IDE 中做到这一点(即使我没有在问题中指定),但我认为这现在不是很相关。再次感谢您的提示!下次我会记住的!
猜你喜欢
  • 1970-01-01
  • 2016-11-03
  • 2016-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2019-02-04
  • 1970-01-01
相关资源
最近更新 更多