예제 #1
0
        DL.Backtrace CreateBacktrace(MD.Thread thread, ML.TargetObject exception)
        {
            List <MD.StackFrame> frames = new List <MD.StackFrame> ();
            DateTime             t      = DateTime.Now;

            if (!thread.CurrentFrame.Language.IsManaged)
            {
                MD.Backtrace bt = thread.GetBacktrace(MD.Backtrace.Mode.Native, max_frames);
                if (bt != null)
                {
                    Console.WriteLine("GetBacktrace native time: {0} ms n:{1}", (DateTime.Now - t).TotalMilliseconds, bt.Count);
                    frames.AddRange(bt.Frames);
                }
            }
            else
            {
                t = DateTime.Now;
                MD.Backtrace backtrace = thread.GetBacktrace(MD.Backtrace.Mode.Managed, max_frames);
                if (backtrace != null)
                {
                    Console.WriteLine("GetBacktrace managed time: {0} ms n:{1}", (DateTime.Now - t).TotalMilliseconds, backtrace.Count);
                    frames.AddRange(backtrace.Frames);
                }
            }
            if (frames.Count > 0)
            {
                BacktraceWrapper wrapper = new BacktraceWrapper(frames.ToArray(), exception);
                return(new DL.Backtrace(wrapper));
            }
            else if (thread.CurrentBacktrace != null)
            {
                BacktraceWrapper wrapper = new BacktraceWrapper(thread.CurrentBacktrace.Frames, exception);
                return(new DL.Backtrace(wrapper));
            }
            return(null);
        }
		DL.Backtrace CreateBacktrace (MD.Thread thread, ML.TargetObject exception)
		{
			List<MD.StackFrame> frames = new List<MD.StackFrame> ();
			DateTime t = DateTime.Now;
			if (!thread.CurrentFrame.Language.IsManaged) {
				MD.Backtrace bt = thread.GetBacktrace (MD.Backtrace.Mode.Native, max_frames);
				if (bt != null) {
					Console.WriteLine ("GetBacktrace native time: {0} ms n:{1}", (DateTime.Now - t).TotalMilliseconds, bt.Count);
					frames.AddRange (bt.Frames);
				}
			} else {
				t = DateTime.Now;
				MD.Backtrace backtrace = thread.GetBacktrace (MD.Backtrace.Mode.Managed, max_frames);
				if (backtrace != null) {
					Console.WriteLine ("GetBacktrace managed time: {0} ms n:{1}", (DateTime.Now - t).TotalMilliseconds, backtrace.Count);
					frames.AddRange (backtrace.Frames);
				}
			}
			if (frames.Count > 0) {
				BacktraceWrapper wrapper = new BacktraceWrapper (frames.ToArray (), exception);
				return new DL.Backtrace (wrapper);
			} else if (thread.CurrentBacktrace != null) {
				BacktraceWrapper wrapper = new BacktraceWrapper (thread.CurrentBacktrace.Frames, exception);
				return new DL.Backtrace (wrapper);
			}
			return null;
		}