Browse Source

Pretty print array content in debugger console

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4344 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 16 years ago
parent
commit
ed13621a90
  1. 24
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/AstEvaluator.cs
  2. 8
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ConsolePad.cs
  3. 50
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj
  4. 68
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/AstEval.cs

24
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/AstEvaluator.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision$</version>
// </file>
using System;
using System.Text;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Ast;
@ -32,5 +33,28 @@ namespace Debugger.AddIn @@ -32,5 +33,28 @@ namespace Debugger.AddIn
}
throw new GetValueException("Code must be expression or statement");
}
public static string FormatValue(Value val)
{
if (val == null) {
return null;
} if (val.IsNull) {
return "null";
} else if (val.Type.IsArray) {
StringBuilder sb = new StringBuilder();
sb.Append(val.Type.Name);
sb.Append(" {");
bool first = true;
foreach(Value item in val.GetArrayElements()) {
if (!first) sb.Append(", ");
first = false;
sb.Append(FormatValue(item));
}
sb.Append("}");
return sb.ToString();
} else {
return val.InvokeToString();
}
}
}
}

8
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ConsolePad.cs

@ -79,13 +79,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -79,13 +79,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
try {
Value val = AstEvaluator.Evaluate(code, SupportedLanguage.CSharp, process.SelectedStackFrame);
if (val == null) {
return string.Empty;
} if (val.IsNull) {
return "null";
} else {
return val.InvokeToString();
}
return AstEvaluator.FormatValue(val);
} catch (GetValueException e) {
return e.Message;
}

50
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutputType>Library</OutputType>
<RootNamespace>Debugger.Tests</RootNamespace>
@ -43,6 +43,7 @@ @@ -43,6 +43,7 @@
<Compile Include="Src\DebuggerTests.cs" />
<Compile Include="Src\DebuggerTestsBase.cs" />
<Compile Include="Src\TestPrograms\ArrayValue.cs" />
<Compile Include="Src\TestPrograms\AstEval.cs" />
<Compile Include="Src\TestPrograms\Break.cs" />
<Compile Include="Src\TestPrograms\Breakpoint.cs" />
<Compile Include="Src\TestPrograms\Callstack.cs" />
@ -78,51 +79,24 @@ @@ -78,51 +79,24 @@
<Compile Include="Src\TestPrograms\ThreadName.cs" />
<Compile Include="Src\TestPrograms\ValueType.cs" />
<Compile Include="Src\TestPrograms\_Template.cs" />
<EmbeddedResource Include="Src\TestPrograms\_Template.cs" />
<EmbeddedResource Include="Src\TestPrograms\ArrayValue.cs" />
<EmbeddedResource Include="Src\TestPrograms\Break.cs" />
<EmbeddedResource Include="Src\TestPrograms\Breakpoint.cs" />
<EmbeddedResource Include="Src\TestPrograms\Callstack.cs" />
<EmbeddedResource Include="Src\TestPrograms\DebuggeeKilled.cs" />
<EmbeddedResource Include="Src\TestPrograms\DebugTypes.cs" />
<EmbeddedResource Include="Src\TestPrograms\DefinedTypes.cs" />
<EmbeddedResource Include="Src\TestPrograms\Exception.cs" />
<EmbeddedResource Include="Src\TestPrograms\ExceptionCustom.cs" />
<EmbeddedResource Include="Src\TestPrograms\Expressions.cs" />
<EmbeddedResource Include="Src\TestPrograms\FileRelease.cs" />
<EmbeddedResource Include="Src\TestPrograms\FunctionArgumentVariables.cs" />
<EmbeddedResource Include="Src\TestPrograms\FunctionLifetime.cs" />
<EmbeddedResource Include="Src\TestPrograms\FunctionLocalVariables.cs" />
<EmbeddedResource Include="Src\TestPrograms\FunctionVariablesLifetime.cs" />
<EmbeddedResource Include="Src\TestPrograms\GenericDictionary.cs" />
<EmbeddedResource Include="Src\TestPrograms\Generics.cs" />
<EmbeddedResource Include="Src\TestPrograms\HelloWorld.cs" />
<EmbeddedResource Include="Src\TestPrograms\MainThreadExit.cs" />
<EmbeddedResource Include="Src\TestPrograms\MemoryReadWrite.cs" />
<EmbeddedResource Include="Src\TestPrograms\Metadata.cs" />
<EmbeddedResource Include="Src\TestPrograms\MetadataIdentity.cs" />
<EmbeddedResource Include="Src\TestPrograms\ObjectValue.cs" />
<EmbeddedResource Include="Src\TestPrograms\PrimitiveValue.cs" />
<EmbeddedResource Include="Src\TestPrograms\PropertyVariable.cs" />
<EmbeddedResource Include="Src\TestPrograms\PropertyVariableForm.cs" />
<EmbeddedResource Include="Src\TestPrograms\SetIP.cs" />
<EmbeddedResource Include="Src\TestPrograms\SimpleProgram.cs" />
<EmbeddedResource Include="Src\TestPrograms\StackOverflow.cs" />
<EmbeddedResource Include="Src\TestPrograms\Stepping.cs" />
<EmbeddedResource Include="Src\TestPrograms\Symbols.cs" />
<EmbeddedResource Include="Src\TestPrograms\TerminatePausedProcess.cs" />
<EmbeddedResource Include="Src\TestPrograms\TerminateRunningProcess.cs" />
<EmbeddedResource Include="Src\TestPrograms\ThreadName.cs" />
<EmbeddedResource Include="Src\TestPrograms\ValueType.cs" />
<EmbeddedResource Include="Src\TestPrograms\*.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Src" />
<Folder Include="Configuration" />
<Folder Include="Src\TestPrograms" />
<ProjectReference Include="..\..\..\..\..\Libraries\NRefactory\Project\NRefactory.csproj">
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project>
<Name>NRefactory</Name>
</ProjectReference>
<ProjectReference Include="..\..\Debugger.AddIn\Project\Debugger.AddIn.csproj">
<Project>{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}</Project>
<Name>Debugger.AddIn</Name>
</ProjectReference>
<ProjectReference Include="..\..\Debugger.Core\Project\Debugger.Core.csproj">
<Project>{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}</Project>
<Name>Debugger.Core</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>
</Project>

68
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/AstEval.cs

@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbeck<EFBFBD>" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
namespace Debugger.Tests.TestPrograms
{
public class AstEval
{
public static void Main()
{
char[] array1 = "Hello".ToCharArray();
char[] array2 = "world".ToCharArray();
char[][] arrays = new char[][] {array1, array2};
List<char> list = new List<char>(array1);
System.Diagnostics.Debugger.Break();
}
}
}
#if TEST_CODE
namespace Debugger.Tests {
using Debugger.AddIn;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Ast;
public partial class DebuggerTests
{
[NUnit.Framework.Test]
public void AstEval()
{
StartTest("AstEval.cs");
Eval("arrays");
EndTest();
}
void Eval(string expr)
{
Value result = AstEvaluator.Evaluate(expr, SupportedLanguage.CSharp, process.SelectedStackFrame);
string restultFmted = AstEvaluator.FormatValue(result);
ObjectDump(expr, restultFmted);
}
}
}
#endif
#if EXPECTED_OUTPUT
<?xml version="1.0" encoding="utf-8"?>
<DebuggerTests>
<Test
name="AstEval.cs">
<ProcessStarted />
<ModuleLoaded>mscorlib.dll (No symbols)</ModuleLoaded>
<ModuleLoaded>AstEval.exe (Has symbols)</ModuleLoaded>
<DebuggingPaused>Break AstEval.cs:22,4-22,40</DebuggingPaused>
<arrays>Char[][] {Char[] {H, e, l, l, o}, Char[] {w, o, r, l, d}}</arrays>
<ProcessExited />
</Test>
</DebuggerTests>
#endif // EXPECTED_OUTPUT
Loading…
Cancel
Save