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

时间:2017-10-24 15:34:26

标签: c++ visual-studio vc6

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

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

}

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

1 个答案:

答案 0 :(得分:0)

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

我无法在源代码中发现任何异常的原因是因为它在名为myCOMlibrary.tli的自动生成文件中隐式定义(类型库实现)。此文件由COM向导创建,并将所有调用包装到COM库中,如果调用返回任何内容,则会引发错误。

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