protected override void InnerExec(MProcess _process, ref Result _result)
 {
     ArgumentsResult argResults = _result as ArgumentsResult;
        CorDebugThread thread = _process.GetThread(m_ThreadID);
        IList<PARAMETER> args = thread.ActiveFrame.GetParamInfo();
        IList<PARAMETER> metaArgs = MetadataMgr.GetFunArguments(thread.ActiveFrame.Function);
        int index = 0;
        int hasThis = 0;
        if (args.Count == metaArgs.Count + 1){
        hasThis = 1;
        args[0].name = "this";
        index++;
        }
        for (; index < args.Count; index++){
        args[index].name = metaArgs[index - hasThis].name;
        if (((DEBUGPARAM)args[index]).inValid){
            args[index].type = metaArgs[index - hasThis].name;
        }
        }
        argResults.CommadStatus = true;
        argResults.Description = "Retrived the Arguments";
        argResults.Args = args;
 }
 protected override void InnerExec(MProcess _process, ref Result _result)
 {
     CorDebugThread debugThread = _process.GetThread(m_ThreadID);
     if(debugThread != null){
         CallStackResult callResult = _result as CallStackResult;
         List<string> stackTrace = new List<string>();
         foreach (CorFunctionFrame fnFrame in debugThread.CallStack){
             if (fnFrame.Function != null){
                 string funName = MetadataMgr.GetFullName(fnFrame.Function);
                 stackTrace.Add(funName);
             }
         }
         if (stackTrace.Count == 0){
             _result.CommadStatus = false;
             _result.Description = debugThread.StackFailureReason;
         } else {
             _result.CommadStatus = true;
             callResult.CallStack = stackTrace;
             _result.Description = "Stack trace succefully retrived for the thread " + m_ThreadID;
         }
     }else{
         _result.CommadStatus = false;
         _result.Description = "Thread is not available [might be terminated] " + m_ThreadID;
     }
 }