好吧,我遇到了一个错误,它简直把我的 bejeebus 搞糊涂了。我正在寻找关于我可以调查什么的想法,因为现在,我一无所获。它是这样的:
我有一个独立的 Java 应用程序,偶尔需要调整它运行的计算机(WinXP 机器)的 Line-In 音量。它通过调用一对可以获取和设置各种组件卷的外部可执行文件(用 VB6* 编写)来实现这一点。(他们可以处理线路输入、麦克风、Wave、CD 和主音量控制。)
现场有数百台设备,在我公司提供和控制的硬件(戴尔机器)上运行。至少有几十个客户正在使用这个功能,而且它运行良好——除了一个实例。
对于这台麻烦的机器,它根本不起作用。当应用程序运行时,我会观察音量滑块,当音量应该下降时,它们会保持原样。当我检查应用程序的日志文件时,它没有抛出任何错误,并且似乎正在执行降低音量的代码。当我从命令行运行可执行文件时,它们运行良好。
我不能保证这台机器与所有正常运行的机器 100% 相同,但我们已经购买同一系列的戴尔产品已经有一段时间了。至少,它非常非常相似。
所以,把我的困惑变成一个项目符号列表:
- 如果我在 Java 代码中做了一些愚蠢的事情(即,没有清除我的 STDOUT/STDERR 缓冲区),为什么这只是这台机器上的一个问题?
- 如果 VB6 可执行文件有问题,为什么它们可以在其他所有机器上以及在这台机器上从命令行运行?
- 如果这台机器上存在某种硬件异常,那么只有在从 Java 应用程序中调用时,哪种异常会导致音量控制可执行文件失败?
我很迷茫。我不喜欢被混淆。任何人有任何建议可能会导致我的启蒙吗?**
-* -- 我知道,我知道,VB6, 1998 调用并且他们想要他们过时的专有错误生成器,等等。不是我的决定。但代码有效。通常。
-** -- 在这里插入佛教笑话。
更新编辑: 客户服务可能偶然发现了一些东西;这可能与数据库中的客户端配置设置有关。新证据表明,要么为该客户端配置错误,要么我的软件在响应特定配置时做了一些愚蠢的事情。而且这个问题可能比我们想象的更普遍,因为这个特殊的功能不像我想象的那么常用。
回复评论:
- 调试器:理论上可行,但考虑到我们的设置,这看起来很头疼。
- High Verbosity Logging,Java:这是个好主意,特别是考虑到问题可能比我最初认为的更普遍。是时候开始重新审视一些假设了。并可能与他们打成一片。就像婴儿海豹一样。
- High Verbosity Logging,VB6:一种可能性;将需要滚入高冗长的 Java 日志记录以捕获输出,因为我的 VB6-fu 太弱了,我不知道如何将文本输出到文件。但是,是的,知道脚本是否被调用会很有价值。
- Window Event Viewer:不熟悉这个工具。可能不得不纠正这一点。
- PATH 问题:感觉不太可能;Java 代码构造了一个看起来不依赖于任何环境变量的可执行文件的相对路径。
感谢人们提供的建议;至少,你让我的大脑朝着有希望的方向发展。
解决方案编辑: 获胜者是……这不是错误,而是功能!一个功能非常糟糕,非常错误。现在将被绝育以不再打扰我们的功能。
一批无效的假设让我无法早点看到它,其中最重要的是“我不需要用更多的调试语句来工具代码——那里已经存在的语句告诉我我需要知道的一切!” DaDaDom,如果你想把你的评论变成答案,里面有一个闪亮的复选标记。
感谢所有提出建议的人。现在,如果你能原谅我,我的头因为与我的办公桌开会而迟到了。