From b16eaf1ddad0c083fc72fdf0aa8124602a4f2ff3 Mon Sep 17 00:00:00 2001 From: mterwoord_cp <7cd3fd84a0151ea055c2f79e4d2eef9576fe9afesxUZAwxD> Date: Wed, 2 Apr 2008 17:16:09 +0000 Subject: [PATCH] debug fixes --- .../Cosmos.Build.Windows.csproj | 7 ++ source/Cosmos.Build.Windows/DebugWindow.xaml | 2 +- .../Cosmos.Build.Windows/DebugWindow.xaml.cs | 84 ++++++++++++++++++- .../OptionsWindow.xaml.cs | 1 - source/Cosmos.Build.Windows/SourceInfo.cs | 4 +- .../ViewSourceWindow.xaml | 10 +++ .../ViewSourceWindow.xaml.cs | 23 +++++ 7 files changed, 125 insertions(+), 6 deletions(-) create mode 100644 source/Cosmos.Build.Windows/ViewSourceWindow.xaml create mode 100644 source/Cosmos.Build.Windows/ViewSourceWindow.xaml.cs diff --git a/source/Cosmos.Build.Windows/Cosmos.Build.Windows.csproj b/source/Cosmos.Build.Windows/Cosmos.Build.Windows.csproj index 2175ad1dd..42135de5c 100644 --- a/source/Cosmos.Build.Windows/Cosmos.Build.Windows.csproj +++ b/source/Cosmos.Build.Windows/Cosmos.Build.Windows.csproj @@ -88,6 +88,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + @@ -117,6 +121,9 @@ True + + ViewSourceWindow.xaml + ResXFileCodeGenerator Resources.Designer.cs diff --git a/source/Cosmos.Build.Windows/DebugWindow.xaml b/source/Cosmos.Build.Windows/DebugWindow.xaml index 821d799c8..25308338d 100644 --- a/source/Cosmos.Build.Windows/DebugWindow.xaml +++ b/source/Cosmos.Build.Windows/DebugWindow.xaml @@ -6,6 +6,6 @@ This is the debug window. Coming soon! For now, leave me open until you are done. Close and the application will terminate. - + diff --git a/source/Cosmos.Build.Windows/DebugWindow.xaml.cs b/source/Cosmos.Build.Windows/DebugWindow.xaml.cs index 4e0bc3dee..608acd40b 100644 --- a/source/Cosmos.Build.Windows/DebugWindow.xaml.cs +++ b/source/Cosmos.Build.Windows/DebugWindow.xaml.cs @@ -14,6 +14,7 @@ using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Windows.Threading; using Indy.IL2CPU; +using System.IO; namespace Cosmos.Build.Windows { public partial class DebugWindow: Window { @@ -76,13 +77,92 @@ namespace Cosmos.Build.Windows { mCurrentPos = 0; UInt32 xEIP = (UInt32)((mTCPData[0] << 24) | (mTCPData[1] << 16) | (mTCPData[2] << 8) | mTCPData[3]); xStream.BeginRead(mTCPData, 0, mTCPData.Length, new AsyncCallback(TCPRead), xStream); - Dispatcher.BeginInvoke(DispatcherPriority.Normal, new DebugPacketRcvdDelegate(DebugPacketRcvd), xEIP); + Dispatcher.BeginInvoke(DispatcherPriority.Background, new DebugPacketRcvdDelegate(DebugPacketRcvd), xEIP); } catch (System.IO.IOException ex) { - Dispatcher.BeginInvoke(DispatcherPriority.Normal, new ConnectionLostDelegate(ConnectionLost), ex); + Dispatcher.BeginInvoke(DispatcherPriority.Background, new ConnectionLostDelegate(ConnectionLost), ex); } } + private static void GetLineInfo(string aData, int aLineStart, int aColumnStart, int aLineEnd, int aColumnEnd, out int oCharStart, out int oCharCount) { + int xCurrentPos = 0; + int xCurrentLine = 1; + oCharCount = 0; + oCharStart = 0; + while (xCurrentPos < aData.Length) { + int xTempPos = aData.IndexOfAny(new char[] { '\r', '\n' }, xCurrentPos); + if (xTempPos == -1) { + if (oCharStart > 0) { + oCharCount = xCurrentPos - oCharStart; + } + return; + } + xCurrentLine += 1; + xCurrentPos = xTempPos; + if (aData[xCurrentPos] == '\r' && aData.Length > (xCurrentPos + 1) && aData[xCurrentPos + 1] == '\n') { + xCurrentPos += 2; + } else { + xCurrentPos += 1; + } + if (xCurrentLine == aLineStart) { + oCharStart = xCurrentPos + aColumnStart; + } + if (xCurrentLine == aLineEnd) { + oCharCount = (xCurrentPos + aColumnEnd) - oCharStart; + } + if (oCharCount > 0 && oCharStart > 0) { + return; + } + } + } + private void lboxLog_MouseDoubleClick(object sender, MouseButtonEventArgs e) { + var xItem = lboxLog.SelectedItem; + string xItemStr = xItem as String; + if (MessageBox.Show("Do you want to do analysis? (Press no if you dont know)", "Debug", MessageBoxButton.YesNo) != MessageBoxResult.Yes) { + if (!String.IsNullOrEmpty(xItemStr)) { + if (mDebugMode == DebugModeEnum.Source) { + var xSourceInfo = mSourceMappings.GetMapping(UInt32.Parse(xItemStr.Substring(2), System.Globalization.NumberStyles.HexNumber)); + var xViewSrc = new ViewSourceWindow(); + //int xCharStart; + //int xCharCount; + //GetLineInfo(xViewSrc.tboxSource.Text, xSourceInfo.Line, xSourceInfo.Column, xSourceInfo.LineEnd, xSourceInfo.ColumnEnd, out xCharStart, out xCharCount); + //if( + int xCharStart = xViewSrc.tboxSource.GetCharacterIndexFromLineIndex(xSourceInfo.Line); + int xCharEnd = xViewSrc.tboxSource.GetCharacterIndexFromLineIndex(xSourceInfo.LineEnd); + xCharStart += xSourceInfo.Column; + xCharEnd += xSourceInfo.ColumnEnd; + xViewSrc.tboxSource.Text = File.ReadAllText(xSourceInfo.SourceFile); + xViewSrc.tboxSource.ScrollToLine(xSourceInfo.Line); + xViewSrc.tboxSource.Select(xCharStart, xCharEnd - xCharStart); + xViewSrc.ShowDialog(); + } else { + throw new Exception("Debug mode not supported!"); + } + //xViewSrc.tboxSource.s + } + } else { + var xViewSrc = new ViewSourceWindow(); + foreach (var xEIP in (from item in lboxLog.Items.Cast() + select item).Distinct(StringComparer.InvariantCultureIgnoreCase)) { + var xSourceInfo = mSourceMappings.GetMapping(UInt32.Parse(xEIP.Substring(2), System.Globalization.NumberStyles.HexNumber)); + if (xSourceInfo == null) { + //MessageBox.Show("No source found for " + xEIP); + continue; + } + //var xViewSrc = new ViewSourceWindow(); + //int xCharStart; + //int xCharCount; + //GetLineInfo(xViewSrc.tboxSource.Text, xSourceInfo.Line, xSourceInfo.Column, xSourceInfo.LineEnd, xSourceInfo.ColumnEnd, out xCharStart, out xCharCount); + //if( + int xCharStart = xViewSrc.tboxSource.GetCharacterIndexFromLineIndex(xSourceInfo.Line); + int xCharEnd = xViewSrc.tboxSource.GetCharacterIndexFromLineIndex(xSourceInfo.LineEnd); + if ((xCharEnd - xCharStart) > 4) { + MessageBox.Show(xEIP); + break; + } + } + } + } } } diff --git a/source/Cosmos.Build.Windows/OptionsWindow.xaml.cs b/source/Cosmos.Build.Windows/OptionsWindow.xaml.cs index 8eb144595..899542320 100644 --- a/source/Cosmos.Build.Windows/OptionsWindow.xaml.cs +++ b/source/Cosmos.Build.Windows/OptionsWindow.xaml.cs @@ -57,7 +57,6 @@ namespace Cosmos.Build.Windows { } else { throw new Exception("Debug mode not supported!"); } - xDebugWindow.ShowDialog(); } } diff --git a/source/Cosmos.Build.Windows/SourceInfo.cs b/source/Cosmos.Build.Windows/SourceInfo.cs index 87e48b8e5..9cdbe04b8 100644 --- a/source/Cosmos.Build.Windows/SourceInfo.cs +++ b/source/Cosmos.Build.Windows/SourceInfo.cs @@ -10,8 +10,8 @@ using Indy.IL2CPU.IL; namespace Cosmos.Build.Windows { public class SourceInfos: SortedList { - public SourceInfo GetIndexClosestSmallerMatch(uint aValue) { - for (int i = 0; i < Count; i++) { + public SourceInfo GetMapping(uint aValue) { + for (int i = Count - 1; i >=0; i--) { if (Keys[i] <= aValue) { return Values[i]; } else { diff --git a/source/Cosmos.Build.Windows/ViewSourceWindow.xaml b/source/Cosmos.Build.Windows/ViewSourceWindow.xaml new file mode 100644 index 000000000..ccac3bd07 --- /dev/null +++ b/source/Cosmos.Build.Windows/ViewSourceWindow.xaml @@ -0,0 +1,10 @@ + + + diff --git a/source/Cosmos.Build.Windows/ViewSourceWindow.xaml.cs b/source/Cosmos.Build.Windows/ViewSourceWindow.xaml.cs new file mode 100644 index 000000000..36f7621a8 --- /dev/null +++ b/source/Cosmos.Build.Windows/ViewSourceWindow.xaml.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace Cosmos.Build.Windows { + /// + /// Interaction logic for ViewSourceWindow.xaml + /// + public partial class ViewSourceWindow: Window { + public ViewSourceWindow() { + InitializeComponent(); + } + } +}