void TraceOneFrame(object dummy) { DebugMemoryStream mem = mConnection.NewMemoryStream(); BinaryReader rdr = new BinaryReader(mem); try { mem.Seek((long)mChaseEbpValue, SeekOrigin.Begin); ulong chaseEbpValue = rdr.ReadUInt32(); ulong returnAddr = rdr.ReadUInt32(); lock (mStackFramesToAdd) { mStackFramesToAdd.Add(returnAddr); } Invoke(Delegate.CreateDelegate(typeof(NoParamsDelegate), this, "DumpStackFrames")); if (chaseEbpValue != 0 && chaseEbpValue > mChaseEbpValue) { mChaseEbpValue = chaseEbpValue; ThreadPool.QueueUserWorkItem(TraceOneFrame); return; } } catch (Exception) { } mInProgress = false; }
void UpdateRow(object toReadObj) { ulong toRead = (ulong)toReadObj; DebugMemoryStream mem = mConnection.NewMemoryStream(); StringBuilder resultName = new StringBuilder(string.Format("{0:X8}:", toRead)); int width = 16; byte[] readBuf = new byte[width]; mem.Seek((long)toRead, System.IO.SeekOrigin.Begin); int i, result = mRunning ? 0 : mem.Read(readBuf, 0, readBuf.Length); if (result == 0) { return; } for (i = 0; i < readBuf.Length; i++) { resultName.Append(string.Format(" {0:X2}", (int)readBuf[i])); } resultName.Append(" | "); for (i = 0; i < readBuf.Length; i++) { resultName.Append((!char.IsControl((char)readBuf[i]) && (int)readBuf[i] < 128) ? (char)readBuf[i] : '\xb7'); } mStoredBytes[toRead] = new ListViewItem(resultName.ToString()); UpdateMemoryWindow(); }