在 VC++6 中查找哪个函数抛出异常

Finding which function throws an exception in VC++6

我正在 vc++6 中处理遗留代码库。有一个错误会抛出异常,但它会被静音,这会导致堆栈上层出现问题。该错误发生在生产环境中,我无法在内部重现该错误(我无法更新生产代码并记录错误)。

HRESULT legacyCall()
{
   try
   {
      return FunctionThatCallsManyFunctions();
   }
   catch( _com_error e)
   {
      return E_FAIL;
   }

}

我试图通过静态分析找出哪些方法调用抛出异常,但是有太多的抽象和代码行需要筛选。我想知道是否有编译器标志或方法来查找抛出异常的位置?

感谢@Quentin,我发现 _com_error 及其访问器在 comdef.h 中定义。可以通过调用 _com_issue_errorex_com_issue_error_com_raise_error 来抛出 _com_error。

我在源代码中找不到任何异常抛出的原因是因为它是在名为 myCOMlibrary.tli(类型库实现)的自动生成文件中隐式定义的。此文件由 COM 向导创建,并包装了 COM 库的所有调用,如果调用 returns 没有成功,则会抛出错误。

知道这一点后,我就能够对上述函数进行 grep,并找到代码中抛出 _com_error 的所有位置。