【发布时间】:2015-02-25 07:37:05
【问题描述】:
我是 C++ 编程的新手。当我将无效参数传递给 C++ 系统函数时,_set_invalid_parameter_handler 给我函数名称、文件和行 - 例如:在 _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 生成以下输出: 函数 = printf, 文件 = f:\dd\vctools\crt\crtw32\stdio\printf.c, 表达式 = (format != NULL) , line = 54
但我想得到类似的东西: 函数 = _tmain ,文件:...\MySample.cpp ,行 =(mysample.cpp 中的 printf 行) 我该怎么做?(如 C# 堆栈跟踪)?
我也尝试了堆栈步行器(call_stack),它给了我自己的路线,我无法通过这种方式满足我的需求。
编辑:还没有回答任何人。请帮忙。 2015.02.25 16:42 Turkiye(雅典区)
【问题讨论】:
-
call_stack结构的名称应该给你一个提示,它是 stack,你必须弹出直到它为空。 -
@JoachimPileborg,我不知道该怎么办? st.stack 的大小 = 1。
标签: c++ error-handling