Index: trunk/Include/system/exception.ab
===================================================================
--- trunk/Include/system/exception.ab	(revision 371)
+++ trunk/Include/system/exception.ab	(revision 372)
@@ -3,18 +3,23 @@
 Class TryLayer
 Public
-	Const AddressOfCatch As VoidPtr
-	Const StackPtr As LONG_PTR
+	Const addressOfCatch As VoidPtr
+	Const basePtr As LONG_PTR
+	Const stackPtr As LONG_PTR
 	context As CONTEXT
 	Const debugProcNum As DWord
 	
-	Sub TryLayer( AddressOfCatch As VoidPtr, StackPtr As LONG_PTR )
-		This.AddressOfCatch = AddressOfCatch
-		This.StackPtr = StackPtr
+	Sub TryLayer( addressOfCatch As VoidPtr, basePtr As LONG_PTR, stackPtr As LONG_PTR )
+		This.addressOfCatch = addressOfCatch
+		This.basePtr = basePtr
+		This.stackPtr = stackPtr
 
-		context.ContextFlags=CONTEXT_ALL
-		If Thread.CurrentThread().__GetContext(context) = 0 Then
+		Dim tempContext As CONTEXT
+
+		tempContext.ContextFlags = CONTEXT_CONTROL or CONTEXT_INTEGER
+		If Thread.CurrentThread().__GetContext(tempContext) = 0 Then
 			' TODO: エラー処理
 			debug
 		End If
+		context = tempContext
 
 #ifdef _DEBUG
@@ -53,7 +58,7 @@
 
 	'Try
-	Function BeginTryScope( AddressOfCatch As VoidPtr, StackPtr As LONG_PTR ) As TryLayer
+	Function BeginTryScope( addressOfCatch As VoidPtr, basePtr As LONG_PTR, stackPtr As LONG_PTR ) As TryLayer
 		ppTryLayers = _System_realloc( ppTryLayers, ( nTryLayers + 1 ) * SizeOf( *TryLayer ) )
-		ppTryLayers[nTryLayers] = New TryLayer( AddressOfCatch, StackPtr )
+		ppTryLayers[nTryLayers] = New TryLayer( addressOfCatch, basePtr, stackPtr )
 		nTryLayers++
 
@@ -87,17 +92,19 @@
 		'--------------------------------------------------
 
+		'レジスタ情報を取得
+		Dim context = ppTryLayers[nTryLayers - 1]->context
+
 		'カレント スレッドを取得
 		Dim thread = Thread.CurrentThread
 
-		'レジスタ情報を取得
-		Dim context = ppTryLayers[nTryLayers - 1]->context
-debug
 		'新しいip, spをセット
 #ifdef _WIN64
-		context.Rip = ppTryLayers[nTryLayers - 1]->AddressOfCatch As QWord
-		'context.Rsp = ppTryLayers[nTryLayers - 1]->StackPtr
+		context.Rip = ppTryLayers[nTryLayers - 1]->addressOfCatch As QWord
+		context.Rbp = ppTryLayers[nTryLayers - 1]->basePtr
+		context.Rsp = ppTryLayers[nTryLayers - 1]->stackPtr
 #else
-		context.Eip = ppTryLayers[nTryLayers - 1]->AddressOfCatch As DWord
-		context.Esp = ppTryLayers[nTryLayers - 1]->StackPtr
+		context.Eip = ppTryLayers[nTryLayers - 1]->addressOfCatch As DWord
+		context.Ebp = ppTryLayers[nTryLayers - 1]->basePtr
+		context.Esp = ppTryLayers[nTryLayers - 1]->stackPtr
 #endif
 
@@ -109,9 +116,10 @@
 		End If
 #endif
-
+debug
 		If thread.__SetContext( context ) = 0 Then
 			OutputDebugString(Ex"レジスタ情報の設定に失敗しました。\r\n")
 			Return
 		End If
+		debug
 	End Sub
 
