我有一个很难复制的异常,但我强烈怀疑它发生在VariantClear()期间。
我有一个函数,它定义一个变量,然后将它传递给另一个变量,而不首先调用它上的VariantInit()。被调用的函数然后对这个变体调用VariantClear(),这可能是异常的来源。
void Func1()
{
VARIANT vData;
//VariantInit(&vData); // no variant clear was done. Will adding this line stop the crash below?
Func2(vData);
}
void Func2(VAR
如何序列化异常对象列表(还包括派生异常,例如。FileNotFoundException)和DataContractSerializer?
我总是得到一个错误,关于序列化程序不知道列表中的类型,所以我设计了一个解决方法。
它看起来像这样:
Dim XmlSerializer As New DataContractSerializer( _
ExceptionsList.GetType(), ExceptionsList.Select(Function(i) i.GetType))
XmlSerializer.WriteObject(Stream, List)
这是可行的。我只需将所有不
通常,我让异常处理程序只处理非常具体的异常,这样代码就不会试图从没有预料到并且可能无法恢复的异常中恢复。
但是,有几个地方不可能提前知道哪些异常是完全有可能恢复的(因为对库的调用没有指定它们可能引发什么异常)。因此,在这些特殊情况下,我实际上捕获了所有的异常:on e:Exception ...。
但这也会处理EAssertionFailed异常,实际上不应该处理这些异常,因为它们意味着代码不正确。
因此,我已经开始编写这样的异常处理程序:
on e:Exception do
begin
if e is EAssertionFailed then
begin
raise;
我正在尝试缓存由读取函数引起的异常:
run :: CurrentData -> IO ()
run current = do
{
x <- (getCommandFromUser) `E.catch` handler;
updated <- executeCommand x current;
run updated;
} where handler :: E.IOException -> IO Command
handler e = do putStrLn "wrong command format" >&