1

所以在尝试调试我正在使用的程序时遇到了一些问题,并想知道是否有人可以帮助我。

当前环境是我正在运行 Cassandra (v2),使用它附带的 cqlsh (v3)。我正在更改它的一些功能,然后使用 cqlsh 测试命令以查看我的更改是否按预期工作,或者在我逐步执行程序时输入的样子。我启动了一个调试会话(在 IntelJ 的 eclipse 中,并不重要),启动服务器代码以接受连接/输入。然后我加载 cqlsh,并指定我想要使用的键空间。这似乎工作正常。然后我执行一行 cql 以通过命令行测试我的更改。我希望看到的是我的 IDE 中的调试器捕获的命令行条目,在那里我可以看到我的代码更改如何处理输入。我所看到的根本没有发生任何事情,就好像没有提交任何命令一样。

所以我的问题如下:

1) 执行上述命令时,我是否应该在调试 IDE 中看到任何内容?2)如果不是,您将如何调试具有此配置的基于服务器的应用程序,尤其是在处理用户输入的领域?3)如果是这样,我应该检查哪些设置以查看我是否设置正确,或者应该遵循哪些流程来查看和调试所述提交?

我认为必须有更好的方法,然后在整个地方拥有 50,000 个 System.out.println()(假设它们甚至可以工作),或者至少,我希望有。

感谢任何阅读本文的人。任何问题(我确信可能存在,因为我可能没有使用正确的描述符)请问。

4

1 回答 1

2

我通过以下方法取得了成功。

  1. 确保使用-g(使用 like: javac -g)进行编译以启用所有调试信息的生成。
  2. 启动应用程序时,使用适当的调试标志(如java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1414,数字是您连接的端口)来启动调试服务器。请注意,您可以从远程主机进行调试(调试器将使用主机名:端口语法进行连接)。您无需为 Cassandra 输入所有内容;您可以简单地取消注释中的相关行cassandra-env.sh(在 Windows 中,查看bin/Cassandra.bat或者如果正在运行 Datastax 发行版,在注册表项下HKLM\SOFTWARE\[optionally Wow6432Node\]Apache Software Foundation\[Procrun node]\[Cassandra node]\Parameters\Java:Options)。
  3. 从您的 IDE 连接到您的服务器(我使用 Eclipse,IntelJ 类似,我敢肯定)。
  4. 在 IDE 中打开源代码并放置一些将在您的用例中发挥作用的断点。
  5. 运行您的方案。你的断点应该命中。为了明确确认设置是否有效,请在您的场景中保证执行的某事上放置断点,而不是在您认为应该执行的某事上。

在您的情况下,因为您可以成功指定密钥空间,所以我相信一切正常,然后当您尝试执行其他步骤时会出现静默失败,这可能是由您的修改引起的。为了确认,我建议您回滚所有更改并首先在干净的构建上测试调试器设置。

最后,这可能是多余的,CQLSH 是一个用 Python 编写的程序,在不同的进程中与 Cassandra 分开运行。因此,您无法从 Java 调试器中看到实际的“命令行条目”。最接近原始输入的方法是在cql3包中的某处放置断点以查看 CQL 语句被传入(希望如此)。当然,如果这是您想要的,您可以使用 Python 调试器来调试 CQLSH。

于 2014-03-15T19:51:34.580 回答