Multithreading 仅在没有Visual Studio的情况下引发Stackoverflow异常

Multithreading 仅在没有Visual Studio的情况下引发Stackoverflow异常,multithreading,stack-overflow,Multithreading,Stack Overflow,我有一个困难的WPF应用程序,它与PTL、许多第三方库和网络一起工作。在开发人员工作站中,它工作正常(也在发布模式下),但当我在客户机工作站中运行它时,在相同的输入数据中出现了stackoverflow异常。此外,应用程序总是在不同的地方崩溃 因此,我的问题是: 我知道,通过try-catch-finally捕获stackoverflow异常是不可能的。但可能存在任何解决方法来了解哪个模块会产生此问题 如果所有第三方库都相等,那么客户端和开发人员环境之间有什么不同 我知道,使用try-catch

我有一个困难的WPF应用程序,它与PTL、许多第三方库和网络一起工作。在开发人员工作站中,它工作正常(也在发布模式下),但当我在客户机工作站中运行它时,在相同的输入数据中出现了stackoverflow异常。此外,应用程序总是在不同的地方崩溃

因此,我的问题是:

  • 我知道,通过try-catch-finally捕获stackoverflow异常是不可能的。但可能存在任何解决方法来了解哪个模块会产生此问题
  • 如果所有第三方库都相等,那么客户端和开发人员环境之间有什么不同
  • 我知道,使用try-catch-finally不可能捕获
    stackoverflowerrror
    异常

    这并非不可能。这是非常不可取的,而且可能无法解决问题。(处理程序所能做的最好的事情是放弃曾经导致问题的原因并尝试继续。但是如果应用程序需要正在计算的结果呢?或者如果应用程序再次尝试相同的计算呢?)

    但可能存在任何解决方法来了解哪个模块会产生此问题

    如果不知道问题的真正原因,就没有好的解决办法

    你如何找到问题的真正原因?调试应用程序


    如果所有第三方库都相等,那么客户端和开发人员环境之间有什么不同

    一般来说,它可以是以下任何一种:

    • 不同的Java版本
    • 不同的操作系统版本
    • 容器和/或虚拟化
    • 不同的网络环境
    • 安装了不同的外部工具
    • 不同的文件系统布局
    • 不同的用户或文件权限
    • 不同的Java应用程序配置
    • 不同的输入数据/数据库
    除此之外,可能还有一些。简言之,可能有很多不同的东西会导致不同的行为。你可能会认为其中一些是不相关的,但这也可能是错误的

    在国际海事组织看来,寻找差异是错误的做法。更好的方法是在客户端环境中调试应用程序。阅读stacktrace、阅读代码、将调试器附加到JVM并设置断点等,以尝试找出实际发生的情况