查找哪个函数在 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 库的所有调用,如果调用返回除成功以外的任何内容,则会引发错误。
知道了这一点,我能够对上述函数进行 grep 并找到代码中抛出_com_error的所有位置。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 参考资源文件VC++中的$(SolutionDir)
- VC++ 异常处理在 x86 和 x64 上对于 IBPP / Firebird 客户端有所不同
- 查找哪个函数在 VC++6 中引发异常
- boost::bind 在 VC++ 2010 中绑定引发异常的函数时不起作用
- VC++中的异常处理堆栈跟踪
- VC++异常处理-应用程序无论如何都会崩溃
- std::线程在vc++中的析构函数中获取异常中止
- VC++中的首次机会异常
- 导致此异常的原因是什么?将 VC++ 2010 与 libcurl 结合使用
- 异常-不正确的行为在vc++ 2015 CTP终极
- visual studio-Vc++/c++强制包含标头异常
- 如何为代码块禁用特定win32异常类型的VC++中断