【问题标题】:Is it possible to link conditional breakpoints and scrapbook in Eclipse?是否可以在 Eclipse 中链接条件断点和剪贴簿?
【发布时间】:2012-11-20 20:15:54
【问题描述】:

是否可以在 Eclipse 中链接条件断点和剪贴簿?我想有一个条件断点触发一段剪贴簿代码(自动)运行。比如……

if(x==4) //Conditional Breakpoint
->Run Scrapbook Code

我知道通过修改源代码这将是微不足道的,但需要针对生产代码或在 Codelock 期间完成。或者,有没有办法使用其他一些工具来做到这一点? *注意,这是针对 Android 开发的(不确定这是否会影响解决方案)

【问题讨论】:

  • 条件断点,当然。剪贴簿?不确定...如果您需要断点的答案,我会发布一个。但我想你已经知道那个了。
  • 如果我可以使用条件断点来触发在调试模式下修改代码中变量的东西,它会正常工作。或任何达到相同效果的东西。

标签: java android eclipse debugging conditional-breakpoint


【解决方案1】:

我知道的唯一方法是结合条件断点和显示视图的使用。

首先,您将创建条件断点

  1. 右键单击断点
  2. 转到断点属性
  3. 启用条件
  4. 输入条件

然后运行你的应用程序,一旦你的调试器到达你的断点

  1. 转到显示视图
  2. 输入您要测试的任何代码
  3. 执行该语句

【讨论】:

  • 感谢您的回答 :) 不幸的是,这是我目前的设置,我澄清了这个问题需要自动化。由于代码的性质,当我使用列表测试某些内容并试图防止快速滚动时出现错误时,它可以快速连续调用很多次。我想找到一个自动化的解决方案来启动剪贴簿代码,但这个答案对其他人来说会很好。
  • 这是我下一个追求的途径。我没用过,所以不太了解。它是否支持动态修改变量?我们的代码与框架高度耦合,因此我不能只使用驱动程序来测试单个功能。再次感谢您的意见:)
  • 你提到在代码中做这件事很简单,所以我想你可以编写一个隔离的测试用例来模拟你的滚动列表,然后添加你的测试代码。这就像运行您的应用程序,但只有那段代码 - 所以是的,变量可以在运行时更新。
  • 感谢您的帮助和想法,由于 androids 框架(它编译应用程序的方式)并在设备上调试它们,JUnit 无法测试与框架交互的东西。默认情况下,带有 android SDK 的 IDE 实际上没有运行这些依赖于 JUnit 框架的方法所需的依赖项。如果我们使用更多的依赖注入,那么将所有 android 框架注入到 JUnit 测试中将是一个可行的选择。使用条件断点还允许在可能出现奇怪错误的设备上调试整个代码。
【解决方案2】:

所以我发现似乎无法将条件断点链接到剪贴簿。可能有人可以破解源代码以获取断点来调用剪贴簿代码或剪贴簿源的自定义变体;但是,没有实现。

幸运的是,我发现我没有深入挖掘条件断点的用法,发现它们相当强大,我可以在没有剪贴簿的情况下解决问题。 (在研究它的同时,我阅读了许多教程,他们都在掩饰如何充分使用它们,并在其代码语句中实际执行变量修改。

if(position==0){
testObject=null;
com.example.test.customLogger(getClass().getSimpleName(),"Conditional BreakPoint Code");
}
return false;

有几点需要注意,希望能对其他人有所帮助

  • 虽然上面的代码可以正确执行,但在我看来,它有一个奇怪的结构,因为“return false”语句位于代码块之外,只有在满足条件时才会执行。

  • 如果返回“false”,调试器不会停止线程,“true”会执行代码并停止。

  • 您可以使用如下所示的内容,尽管它不在 if 语句中,但它也会触发断点。 (基本上它接受 Java 和简单语句)

    “位置==0”

  • 您似乎不能将简单的语句和 java 混合使用,并且在这样做时会抛出非常神秘的误导性消息(这让我相信我需要 Scrapbooks 和条件断点)
  • 您必须在代码块的末尾返回一个布尔值,调试器使用该布尔值来确定是暂停线程还是继续。否则,它会抛出关于不返回布尔值的错误,如果你将返回值移到 if 块内,它就会发生这种情况。

如果您的代码与类高度耦合,该类在 android 中包含许多在它们之间共享的方法和对象,这使得在事后难以实施单元测试,这种方法非常有效。然而,其他有用的测试途径是:

  • Android 开发者的猴子
  • Android 开发者的 MonkeyRunner
  • RoboGuice
  • 机器人
  • 机器人电动
  • JUnit(不太可行,因为您无法测试与 android 框架交互的东西,除非您将它与 RobotElectric 结合使用)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2010-11-02
    • 2017-01-25
    • 1970-01-01
    • 2014-09-06
    • 2010-09-19
    相关资源
    最近更新 更多