【问题标题】:How would you approach to rectify a non-responsive application?您将如何纠正无响应的应用程序?
【发布时间】:2011-07-11 09:55:17
【问题描述】:

刚刚我接受了 ca(Computer Associates) 的 C++ 招聘面试。

问:有一个应用程序连续运行了好几天......在某一天它变得无响应/被挂起。您将如何调试/纠正应用程序。您的第一步是什么?

A:我的回答是从……开始检查内存使用详细信息/CPU 使用情况……检查某些所需资源是否可用……或者它是否是网络绑定的,如果网络是活动的……等等..

问:他说..这些都是表面的东西..假设不存在这样的问题..那么呢?

A:我告诉过最好的方法是检查调试日志是否已启用..如果它们没有..给客户一个启用调试的应用程序并在现场进行测试。 因为应用程序间歇性挂起..很难通过任何其他方式检测到它为什么会无响应..调试日志会告诉我应用程序在什么时候开始发疯,以找到根本原因负责的具体操作需要知道,调试日志是我认为最好的选择。

面试官切换到另一个问题说..好的。

那么,我的回答是否足够好。一个优秀的程序员会遵循的任何其他方法吗?

【问题讨论】:

  • “有一个应用程序”太含糊了。
  • @Martinho 是的,我同意!

标签: c++


【解决方案1】:

使用 WinDbg 或创建一个(迷你)转储文件并将其加载到您的 Visual Studio 中。加载所有发布二进制文件的调试符号,并查看它的确切挂起位置

这应该是不错的第一步

编辑当然,我(愚蠢地)无缘无故地假设了窗户。在 UNIX/linux 上,使用 straceptracegdb --remotepstackdtrace(如果有的话)等会更容易

编辑 通常,使用 WMI 性能计数器/perfmon 也是一种非常好的做法。这可能会有所启发(但我确信面试官正在寻找“如何检查正在运行的应用程序”类型的答案;这略微倾向于您在您的文章中已经提到的“依赖于日志记录”方法自己的答案)

【讨论】:

  • 即使没有调试符号,这至少是一个开始,因为您可以找到我们的代码卡在哪些模块中。如果可以的话,也不要忘记进行多次转储,这会告诉您是否程序处于死锁情况,或无限循环。
【解决方案2】:

大多数情况下,此类问题无法准确回答,因为它们非常主观。他们通常被要求评估和判断潜在候选人如何解决问题,并展示一些调试问题的建设性方法。只要答案显示了解决问题的一些合乎逻辑的方法,那么答案就是好的。

你的回答很好。除此之外,最重要的是确定出现问题的用例/模式。如果一个问题很容易重现,那么它是可以解决的。所以我会尝试定义重现问题的步骤,然后继续解决问题。

【讨论】:

    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 2022-07-29
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多