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();
+ }
+ }
+}