VC ++中的异常处理堆栈跟踪

时间:2015-02-25 07:37:05

标签: c++ error-handling

我是C ++编程的新手。当我将无效参数传递给C ++系统函数时,_set_invalid_parameter_handler给我函数名,文件和行 - 对于ex.:in _tmain printf行生成错误 - 但是我想获取函数名,文件和编程行,而不是关于系统功能。

void myInvalidParameterHandler(const wchar_t* expression,
    const wchar_t* function,
    const wchar_t* file,
    unsigned int line,
    uintptr_t pReserved)
{
    wprintf(L"Invalid parameter detected in function %s."
        L" File: %s Line: %d\n", function, file, line);
    wprintf(L"Expression: %s\n", expression);
    call_stack st;
    st.stack.back();
    cout << st.stack.back().to_string();
    cout << st.to_string();

}

int _tmain(int argc, _TCHAR* argv[])
{
    char* formatString;
    _invalid_parameter_handler oldHandler, newHandler;
    newHandler = myInvalidParameterHandler;
    oldHandler = _set_invalid_parameter_handler(newHandler);
    formatString = NULL;
    printf(formatString); // I want to get this line
    return 0;
}

在此示例中,myInvalidParameterHandler生成以下输出: function = printf,file = f:\ dd \ vctools \ crt \ crtw32 \ stdio \ printf.c,expression =(format!= NULL),line = 54

但我希望得到类似的东西: function = _tmain,file:... \ MySample.cpp,line =(mysample.cpp中的printf行) 我该怎么做?(比如C#堆栈跟踪)?

我也尝试过堆栈walker(call_stack),它给了我自己的线路,我无法通过这种方式满足我的需求。

编辑:还没回答任何人。请帮忙。 2015.02.25 16:42 Turkiye(雅典地区)

0 个答案:

没有答案