我是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(雅典地区)