捕获VA_LIST错误
catching va_list error
我目前正在使用以下功能打印我的调试字符串:
void Script::OutputDebugStringN(const char *format, ...)
{
char outstring[256];
memset(outstring, 0, sizeof(outstring));
try
{
va_list args = {0};
va_start(args, format); //args = (va_list) (&format+1);
vsprintf(outstring, format, args);
va_end(args);
OutputDebugString(outstring);
}
catch (...) //most likely reference val arg error (va_list doesn't support ref args)
{
OutputDebugString("[OutputDebugStringN] Something went wrongn");
}
}
我会收到" eDitor.exe.exe"中的"无人手法"。这是完全可以理解的,但是我想知道如何将其封装在可能的尝试catch语句中,以防止错误关闭整个程序。(以上不起作用)
我目前从我的C#编辑器中调用了一个自制的C DLL(带有上述功能)。
这是C#代码:
private void ComponentDispatcher_ThreadIdle(object sender, EventArgs e)
{
//render display window (if something is not blocking it)
if (renderViewHost.Update)
{
try { NativeMethods.UpdateRenderWindow(); }
catch (Exception exc)
{ Debug.WriteLine("[ThreadIdle::UpdateRenderWindow] Exception caught: {0}" + exc); }
}
}
我只是发现打印出调试字符串的功能本身是错误的,这是不可接受的。有任何想法吗?欢迎所有有关不良代码/观察的评论。
根据C 标准,使用VA_START传递va_start的参考args是C 中的不确定行为。这意味着您无法预测编译器会做什么。即使在此编译器中使用某些东西,它也可能无法在另一个编译器上使用。它甚至可能在下一个版本的同一编译器上都无法使用。
也就是说,可能有特定平台的构造可以帮助您引起例外。例如。在Windows上,您应该能够使用_ try/ _Except来捕获异常。但是请注意,这是不确定的行为 - 即使在此版本的编译器中起作用,在下一个版本中,va_start可能会决定做完全不同的事情,这可能导致其他错误&不是可以在__try/__except
相关文章:
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 <list> (错误 C2760) 打印队列的元素
- 调用 list.size() 方法给出错误"expression must have class type"
- 关于使用 Std::List 作为类成员变量的奇怪错误
- std :: list(双重链接列表)未知运行时错误
- 错误:无法将"dirent*"转换为"search_directories(std::string, std::list<start_tournament_info_t*>&, bool)
- 如何修复<function-style-cast>错误:无法从'initializer list'转换为asdending比较<W>(模板函子)
- 如何修复错误消息,如"argument list for class template is missing"?
- 将 SharedPtr 与 std::list 一起使用时内存泄漏!错误
- 错误消息"undefined reference to 'List::a'"
- C++错误:与调用'(std::list<int>) (int&)'不匹配
- 递归调用中出现错误"[Error] expression list treated as compound expression in initializer [-fpermissive]"
- C++ "argument list for class template "迭代器" is missing"错误
- 如何修复'Size of list( a class) is unknown or zero error'和"声明语法错误"?
- 方法定义中的错误"passing const List<int> as this argument discards qualifiers"
- VS2015无法从'initializer list'转换为'std::string'错误
- 为什么我会收到错误"parameter pack 'F' must be at the end of the template parameter list"
- 错误:没有用于初始化'List<double>::node'的匹配构造函数
- C++ - 错误:'list'没有命名类型(将对象列为类中的成员变量)
- dsr/linkcache.cc:致命错误:list.h:没有这样的文件或目录