Outlook 插件中的 StackOverFlow 异常

StackOverFlow Exception in Outlook Addin

我是编程世界的新手,正在尝试重构一个 Outlook 插件,其中所有代码都是用 ThisAddIn.cs 编写的,即自动生成的文件。我已将 ThisAddIn 的内容分成几个 class,但是当我调试我的应用程序时,抛出了 Whosebug 异常。这种问题的原因可能是什么?

一般来说,WhosebugException表示某些代码进入了死循环。考虑下面的示例,它永远不会终止。假设 Main 是您的应用程序(即 Outlook 插件)的入口点,然后方法 AMain 将继续相互调用,直到发生 WhosebugException

public void Main()
{
    A();
}

public void A()
{
    Main();
}

如果您可以 运行 在 Visual Studio 中处于调试模式的应用程序,它通常会告诉您 WhosebugException 发生的堆栈跟踪。使用该信息应该可以追踪错误。

这通常是由递归函数(例如由于误用或 "bad" 停止条件)或不断相互引发的事件引起的。

最常见的原因是递归函数:调用自身的函数。

有关故障排除提示,请参阅此内容:How do I prevent and/or handle a WhosebugException?

调试时,您希望在调用堆栈变得非常大时pause/halt 执行代码,然后问题就会显现出来。这是一个例子,如果你用大数字调用这个函数,你会得到一个 Whosebug 异常:

private long Multiply(int x, int y) 
{
  x+=y;
  y--;
  if (y==0) return x;
  return Multiply(x,y);
}