我正在使用vc ++ 6中的遗留代码库。有一个错误会抛出异常,但它会被静音,导致堆栈上的问题更高。该错误发生在生产中,我无法重新编写内部错误(我无法更新生产代码并记录错误)。
HRESULT legacyCall()
{
try
{
return FunctionThatCallsManyFunctions();
}
catch( _com_error e)
{
return E_FAIL;
}
}
我正在尝试通过静态分析找到哪个方法调用抛出异常,但是有太多的抽象和代码行需要筛选。我想知道是否有编译器标志或方法来查找抛出异常的位置?
答案 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的所有位置。