查找哪个函数在 VC++6 中引发异常

Finding which function throws an exception in VC++6

本文关键字:异常 VC++6 函数 查找      更新时间:2023-10-16

我正在 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 库的所有调用,如果调用返回除成功以外的任何内容,则会引发错误。

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