分类 调试 下的文章

顾名思义,AggregateException用于在单个异常中对一个或多个异常进行批处理。在本文中,我将向您展示为什么会发生此异常,以及如何在C代码中调试它。

错误的产生和处理

让我们从强制一个产生新的AggregateException开始。这个异常在.NET的任务库中被大量使用,为什么选择一个包含任务的示例是一件轻而易举的事情:

Task task1 = Task.Factory.StartNew(() => { throw newArgumentException(); } );
Task task2
= Task.Factory.StartNew(() => { throw newUnauthorizedAccessException(); } );try{
Task.WaitAll(task1, task2);
}
catch(AggregateException ae)
{
}

什么是SEH?


SEH( Structured Exception Handling , 结构化异常处理 )

结构化异常处理(SEH)是Windows操作系统提供的强大异常处理功能。而Visual C++中的__try{}/__finally{}和__try{}/__except{}结构本质上是对Windows提供的SEH的封装

什么是TEB

TEB(Thread Environment Block,线程环境块)

线程环境块中存放着进程中所有线程的各种信息

这里我们了解到了TEB即为线程环境块, 进程中每一条线程都对应着的自己的“TEB”。

TEB的访问方法

ntdll.NtCurrentTeb() 函数用来返回当前线程的TEB结构体指针