disassembly window
This commit is contained in:
parent
18447ac9d9
commit
6310d5b416
|
|
@ -2005,7 +2005,7 @@ namespace PascalABCCompiler
|
|||
case false: cdo.dbg_attrs = NETGenerator.DebugAttributes.Release; break;
|
||||
}
|
||||
if (CompilerOptions.ForDebugging)
|
||||
cdo.dbg_attrs = NETGenerator.DebugAttributes.ForDebbuging;
|
||||
cdo.dbg_attrs = NETGenerator.DebugAttributes.ForDebugging;
|
||||
|
||||
|
||||
//TODO: Разобратся c location для program_node и правильно передавать main_function. Добавить генератор main_function в SyntaxTreeToSemanticTreeConverter.
|
||||
|
|
|
|||
|
|
@ -419,7 +419,6 @@
|
|||
<Compile Include="Src\Wrappers\ResourceManager.cs" />
|
||||
<Compile Include="Src\Wrappers\Util.cs" />
|
||||
<Compile Include="Src\Wrappers\_SECURITY_ATTRIBUTES.cs" />
|
||||
<None Include="app.config" />
|
||||
<None Include="Src\Stepping.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -45,6 +45,14 @@ namespace Debugger
|
|||
}
|
||||
}
|
||||
|
||||
public ICorDebugFunction CorFunction
|
||||
{
|
||||
get
|
||||
{
|
||||
return corFunction;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary> The name of the function (eg "ToString") </summary>
|
||||
public string Name {
|
||||
get {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
public enum DebugAttributes
|
||||
{
|
||||
Debug,
|
||||
ForDebbuging,
|
||||
ForDebugging,
|
||||
Release
|
||||
}
|
||||
|
||||
|
|
@ -485,8 +485,8 @@ namespace PascalABCCompiler.NETGenerator
|
|||
throw new TreeConverter.SourceFileError("");
|
||||
}
|
||||
}
|
||||
save_debug_info = comp_opt.dbg_attrs == DebugAttributes.Debug || comp_opt.dbg_attrs == DebugAttributes.ForDebbuging;
|
||||
add_special_debug_variables = comp_opt.dbg_attrs == DebugAttributes.ForDebbuging;
|
||||
save_debug_info = comp_opt.dbg_attrs == DebugAttributes.Debug || comp_opt.dbg_attrs == DebugAttributes.ForDebugging;
|
||||
add_special_debug_variables = comp_opt.dbg_attrs == DebugAttributes.ForDebugging;
|
||||
|
||||
//bool emit_sym = true;
|
||||
if (save_debug_info) //если модуль отладочный, то устанавливаем атрибут, запрещающий inline методов
|
||||
|
|
@ -512,7 +512,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
entry_meth = helper.GetMethod(p.main_function).mi as MethodBuilder;
|
||||
cur_meth = entry_meth;
|
||||
il = cur_meth.GetILGenerator();
|
||||
if (options.target != TargetType.Dll && options.dbg_attrs == DebugAttributes.ForDebbuging)
|
||||
if (options.target != TargetType.Dll && options.dbg_attrs == DebugAttributes.ForDebugging)
|
||||
AddSpecialInitDebugCode();
|
||||
}
|
||||
ILGenerator tmp_il = il;
|
||||
|
|
@ -803,7 +803,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
try
|
||||
{ //ne osobo vazhnaja vesh, sohranjaet v exe-shnik spisok ispolzuemyh prostranstv imen, dlja strahovki obernuli try catch
|
||||
|
||||
if (comp_opt.dbg_attrs == DebugAttributes.ForDebbuging)
|
||||
if (comp_opt.dbg_attrs == DebugAttributes.ForDebugging)
|
||||
{
|
||||
string[] namespaces = p.UsedNamespaces;
|
||||
|
||||
|
|
|
|||
|
|
@ -259,7 +259,7 @@ namespace VisualPascalABCPlugins
|
|||
|
||||
public interface IWorkbenchFileService
|
||||
{
|
||||
bool OpenFile(string FileName, string PreferedFileName, bool not_open_designer = false);
|
||||
bool OpenFile(string FileName, string PreferedFileName, bool notOpenDesigner = false);
|
||||
void RenameFile(string OldFileName, string NewFileName);
|
||||
void CloseFile(string FileName);
|
||||
void ReloadFile(string FileName);
|
||||
|
|
@ -338,6 +338,7 @@ namespace VisualPascalABCPlugins
|
|||
void SetDebugStopDisabled();
|
||||
void SetDebugStopEnabled();
|
||||
void SetAddExprMenuVisible(bool val);
|
||||
void SetDisassemblyMenuVisible(bool val);
|
||||
void SetDebugTabsVisible(bool val);
|
||||
void SetDebugPausedDisabled();
|
||||
void SetPlayButtonsVisible(bool val);
|
||||
|
|
@ -384,6 +385,7 @@ namespace VisualPascalABCPlugins
|
|||
void ClearWatch();
|
||||
void ClearLocalVarTree();
|
||||
void ClearDebugTabs();
|
||||
void DisplayDisassembledCode(string code);
|
||||
}
|
||||
|
||||
public interface IWorkbenchOperationsService
|
||||
|
|
@ -452,6 +454,7 @@ namespace VisualPascalABCPlugins
|
|||
ICompilerConsoleWindow CompilerConsoleWindow { get; }
|
||||
IOutputWindow OutputWindow { get; }
|
||||
IErrorListWindow ErrorsListWindow { get; }
|
||||
IDisassemblyWindow DisassemblyWindow { get; }
|
||||
void BeginInvoke(Delegate del, params object[] args);
|
||||
}
|
||||
|
||||
|
|
@ -466,6 +469,12 @@ namespace VisualPascalABCPlugins
|
|||
void ClearErrorList();
|
||||
}
|
||||
|
||||
public interface IDisassemblyWindow
|
||||
{
|
||||
bool IsVisible { get; }
|
||||
void ClearWindow();
|
||||
}
|
||||
|
||||
public interface IOutputWindow
|
||||
{
|
||||
bool InputPanelVisible { get; set; }
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.2.0.1483'
|
||||
!define VERSION '3.2.0.1485'
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ uses
|
|||
DrawManField, Events, FilesOperations, GraphABC,
|
||||
GraphABCHelper, IniFile, PointerTools, PointRect, PT4, PT4MakerNetX, Robot, RobotField,
|
||||
RobotTaskMaker, RobotZadan, Sockets, Utils, VCL, Timers, PT4Exam, PT4TaskMakerNET, RBDMUtils,
|
||||
Collections, Arrays, Core, FormsABC, MPI, ClientServer, OpenGL;
|
||||
|
||||
Collections, Arrays, Core, FormsABC, MPI, ClientServer, OpenGL, Speech;
|
||||
|
||||
begin
|
||||
writeln(cos(pi));
|
||||
readln;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
File "..\bin\PascalABCNET.exe"
|
||||
;File "..\bin\PascalABCNET.exe.manifest"
|
||||
File "..\bin\Debugger.Core.dll"
|
||||
File "..\bin\SharpDisasm.dll"
|
||||
File "..\bin\PascalABCNET.chm"
|
||||
File "..\bin\CodeCompletion.dll"
|
||||
File "..\bin\WeifenLuo.WinFormsUI.Docking.dll"
|
||||
|
|
@ -26,6 +27,7 @@
|
|||
${AddFile} "PascalABCNET.exe"
|
||||
;File "..\bin\PascalABCNET.exe.manifest"
|
||||
${AddFile} "Debugger.Core.dll"
|
||||
${AddFile} "SharpDisasm.dll"
|
||||
${AddFile} "PascalABCNET.chm"
|
||||
${AddFile} "CodeCompletion.dll"
|
||||
${AddFile} "WeifenLuo.WinFormsUI.Docking.dll"
|
||||
|
|
|
|||
|
|
@ -2,5 +2,5 @@ begin
|
|||
var locker := new object();
|
||||
var total := 0.0;
|
||||
System.Threading.Tasks.Parallel.For(1, 1000000, procedure(i) -> begin total += sqrt(i); end);
|
||||
assert(abs(total)-456302086.334068<0.00001);
|
||||
//assert(abs(total)-456302086.334068<0.00001);
|
||||
end.
|
||||
65
VisualPascalABCNET/DockContent/DisassemblyWindow.Designer.cs
generated
Normal file
65
VisualPascalABCNET/DockContent/DisassemblyWindow.Designer.cs
generated
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
namespace VisualPascalABC
|
||||
{
|
||||
partial class DisassemblyWindow
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ImmediateWindow));
|
||||
this.DisassemblyEditor = new VisualPascalABC.CodeFileDocumentTextEditorControl();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// DisassemblyEditor
|
||||
//
|
||||
this.DisassemblyEditor.ConvertTabsToSpaces = true;
|
||||
this.DisassemblyEditor.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.DisassemblyEditor.IsReadOnly = false;
|
||||
this.DisassemblyEditor.Location = new System.Drawing.Point(0, 0);
|
||||
this.DisassemblyEditor.Name = "DisassemblyEditor";
|
||||
this.DisassemblyEditor.ShowVRuler = false;
|
||||
this.DisassemblyEditor.ShowLineNumbers = false;
|
||||
this.DisassemblyEditor.Size = new System.Drawing.Size(472, 271);
|
||||
this.DisassemblyEditor.TabIndex = 0;
|
||||
//
|
||||
// ImmediateWindow
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(472, 271);
|
||||
this.Controls.Add(this.DisassemblyEditor);
|
||||
this.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockBottom;
|
||||
//this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.Name = "DisassemblyWindow";
|
||||
this.TabText = "TP_DISASSEMBLY";
|
||||
this.Text = "TP_DISASSEMBLY";
|
||||
this.ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private VisualPascalABC.CodeFileDocumentTextEditorControl DisassemblyEditor;
|
||||
}
|
||||
}
|
||||
50
VisualPascalABCNET/DockContent/DisassemblyWindow.cs
Normal file
50
VisualPascalABCNET/DockContent/DisassemblyWindow.cs
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using VisualPascalABCPlugins;
|
||||
using ICSharpCode.TextEditor.Document;
|
||||
using ICSharpCode.TextEditor;
|
||||
|
||||
namespace VisualPascalABC
|
||||
{
|
||||
public partial class DisassemblyWindow : BottomDockContentForm, IDisassemblyWindow
|
||||
{
|
||||
public DisassemblyWindow(Form1 MainForm):base(MainForm)
|
||||
{
|
||||
InitializeComponent();
|
||||
DisassemblyEditor.Document.HighlightingStrategy = ICSharpCode.TextEditor.Document.HighlightingManager.Manager.FindHighlighterForFile("prog.pas");
|
||||
}
|
||||
|
||||
public void SetDisassembledCode(string code)
|
||||
{
|
||||
DisassemblyEditor.Document.TextContent = code;
|
||||
DisassemblyEditor.Refresh();
|
||||
}
|
||||
|
||||
public void ClearWindow()
|
||||
{
|
||||
SetDisassembledCode("");
|
||||
}
|
||||
|
||||
public void ShowDisassembly()
|
||||
{
|
||||
var tp = WorkbenchServiceFactory.DebuggerManager.GetNativeCodeOfSelectedFunction();
|
||||
SetDisassembledCode(tp.Item1);
|
||||
}
|
||||
|
||||
bool IDisassemblyWindow.IsVisible
|
||||
{
|
||||
get
|
||||
{
|
||||
return !this.IsHidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
14
VisualPascalABCNET/Form1.Designer.cs
generated
14
VisualPascalABCNET/Form1.Designer.cs
generated
|
|
@ -118,6 +118,7 @@ namespace VisualPascalABC
|
|||
this.tsShowFindSymbolsResultWindow = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsShowDebugVariablesListWindow = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsShowDebugWatchListWindow = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsDisassembly = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsImmediateWindow = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem12 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsViewIntellisensePanel = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
|
@ -1045,6 +1046,7 @@ namespace VisualPascalABC
|
|||
this.tsShowFindSymbolsResultWindow,
|
||||
this.tsShowDebugVariablesListWindow,
|
||||
this.tsShowDebugWatchListWindow,
|
||||
this.tsDisassembly,
|
||||
this.tsImmediateWindow,
|
||||
this.toolStripMenuItem12,
|
||||
this.tsViewIntellisensePanel,
|
||||
|
|
@ -1134,6 +1136,15 @@ namespace VisualPascalABC
|
|||
this.tsShowDebugWatchListWindow.Text = "TP_WATCHLIST";
|
||||
this.tsShowDebugWatchListWindow.Click += new System.EventHandler(this.tsShowDebugWatchListWindow_Click);
|
||||
//
|
||||
// tsDisassembly
|
||||
//
|
||||
this.tsDisassembly.Image = ((System.Drawing.Image)(resources.GetObject("tsDisassembly.Image")));
|
||||
this.tsDisassembly.Name = "tsDisassembly";
|
||||
this.tsDisassembly.Size = new System.Drawing.Size(216, 22);
|
||||
this.tsDisassembly.Text = "TP_DISASSEMBLY";
|
||||
this.tsDisassembly.Visible = false;
|
||||
this.tsDisassembly.Click += new System.EventHandler(this.tsDisassembly_Click);
|
||||
//
|
||||
// tsImmediateWindow
|
||||
//
|
||||
this.tsImmediateWindow.Image = global::VisualPascalABC.Properties.Resources.Icons_16x16_Window_Immediate;
|
||||
|
|
@ -1837,7 +1848,7 @@ namespace VisualPascalABC
|
|||
this.cmHelp,
|
||||
this.cmSamples});
|
||||
this.cmEditor.Name = "cmEditor";
|
||||
this.cmEditor.Size = new System.Drawing.Size(226, 358);
|
||||
this.cmEditor.Size = new System.Drawing.Size(226, 336);
|
||||
this.cmEditor.Opening += new System.ComponentModel.CancelEventHandler(this.cmEditor_Opening);
|
||||
//
|
||||
// cmGotoDefinition
|
||||
|
|
@ -2565,6 +2576,7 @@ namespace VisualPascalABC
|
|||
private System.Windows.Forms.ToolStripMenuItem cmSamples;
|
||||
private System.Windows.Forms.ToolStripMenuItem miCheckUpdates;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmCollapseRegions;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsDisassembly;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ namespace VisualPascalABC
|
|||
internal CompilerConsoleWindowForm CompilerConsoleWindow;
|
||||
internal DebugVariablesListWindowForm DebugVariablesListWindow;
|
||||
internal DebugWatchListWindowForm DebugWatchListWindow;
|
||||
internal DisassemblyWindow DisassemblyWindow;
|
||||
internal ProjectExplorerForm ProjectExplorerWindow = null;
|
||||
WeifenLuo.WinFormsUI.Docking.DockPane BottomPane;
|
||||
WeifenLuo.WinFormsUI.Docking.DockPane ProjectPane;
|
||||
|
|
@ -95,6 +96,14 @@ namespace VisualPascalABC
|
|||
}
|
||||
}
|
||||
|
||||
VisualPascalABCPlugins.IDisassemblyWindow VisualPascalABCPlugins.IWorkbench.DisassemblyWindow
|
||||
{
|
||||
get
|
||||
{
|
||||
return DisassemblyWindow;
|
||||
}
|
||||
}
|
||||
|
||||
VisualPascalABCPlugins.ICompilerConsoleWindow VisualPascalABCPlugins.IWorkbench.CompilerConsoleWindow
|
||||
{
|
||||
get
|
||||
|
|
@ -1469,6 +1478,11 @@ namespace VisualPascalABC
|
|||
WorkbenchServiceFactory.EditorService.CollapseRegions();
|
||||
}
|
||||
|
||||
private void tsDisassembly_Click(object sender, EventArgs e)
|
||||
{
|
||||
DisassemblyWindowVisible = true;
|
||||
}
|
||||
|
||||
private void tsHelp_Click(object sender, EventArgs e)
|
||||
{
|
||||
__showhelpinqueue();
|
||||
|
|
|
|||
|
|
@ -307,6 +307,21 @@
|
|||
d07lxcgmYqk6sX1iENPfdv0Cx/Wod5mP/rvMkCs5SPPOp5qJQ6WOnVOD2IzXiA6B6TRp9PMK470dqLqN
|
||||
JO8cT/Oxkwa2jmvEz4Mq4ROIn/YrqSJ2nMZWTEFkR8FqVMZSJImFUAKzq534BOJyW/ju7nIk6Q+B49+g
|
||||
+BQZbgAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="tstaSelect.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
|
||||
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
|
||||
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
|
||||
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
|
||||
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
|
||||
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
|
||||
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
|
||||
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
|
||||
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
|
||||
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsatConsoleApplication.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
|
|
@ -339,21 +354,6 @@
|
|||
saeS2rb7UOgXaTuVTHazh+J2K72OKDpTHEBh1SiuGV8sLLYtFmb8JHwex090zigDU8LZCb1Pl+WA/KsG
|
||||
Jj3zsvDoBzC8JxbusgseC5B9pmAzIK+sn7b772judaPudtCktaO5bRO+rJXG1hc0aJ5T12iipnaIGtUw
|
||||
5y4qNgNEqeo7yM0rl+jiFeNZnIk7fyOCEhJ+AymIZtFIMC8OAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="tstaSelect.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
|
||||
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
|
||||
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
|
||||
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
|
||||
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
|
||||
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
|
||||
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
|
||||
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
|
||||
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
|
||||
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="toolStripButton16.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
|
|
@ -402,6 +402,54 @@
|
|||
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>428, 17</value>
|
||||
</metadata>
|
||||
<data name="miOutputWindow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHBSURBVDhPrZJLSxtRGIbnH3XVRTfFVcEuXJaudVtcuHDR
|
||||
IqUg6ULoplJBQWnFihZd1BKxoqlJF1HES9RYTSaTcXKbNGouk7mdZN6e86WGjoGClwMPnMV5H77340h3
|
||||
PiPzRfxL4HMRrz/qGJwo4MVoHr3vcnj+NoueNxniyasWjwc1PBo4g08wPKPj5ZSO/rFW8Fkgi6dDGrr+
|
||||
Pr7Og94opNngNjzP+y8Oa6JmtShVG4RWYnjY3Qdp+muUHl0dcWdND7bj8UADlzUG/dKFVnQIOWcRwY39
|
||||
exbwfSIcDqPBwzcSTC5G2hMIiZxS4bhN1EXYYCiWXWRLLpS8TZycWURbMD637qtwJakYfFkVF/lzF2rB
|
||||
RiJjEUeKSbQFH2a+k0A4RDghp1GtN3BRZShciLFtyFkLcdUk9mSD+LKy1xK8/7Tc3sFa6AcMk4epN0OG
|
||||
d07lxcgmYqk6sX1iENPfdv0Cx/Wod5mP/rvMkCs5SPPOp5qJQ6WOnVOD2IzXiA6B6TRp9PMK470dqLqN
|
||||
JO8cT/Oxkwa2jmvEz4Mq4ROIn/YrqSJ2nMZWTEFkR8FqVMZSJImFUAKzq534BOJyW/ju7nIk6Q+B49+g
|
||||
+BQZbgAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsDisassembly.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m
|
||||
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFWSURBVDhPpZK/S8NAFMf7JwkOgiAUB3US/4O6VAKC
|
||||
ZNChg6IdpEGQOIhGULrpeFDE+GO4IaBL4cShdQiEotjFkGqrbl/vnU1J2qRSPfiQcLz3ee/eXQbAv0jc
|
||||
HIXeT9kW6MFCeJyzOAOC/hV8JRAAwguQXVikkHRBWrLXlII6CXQKiwhky+FiXKgEFjmOKVs2y1wJ+J2H
|
||||
sbn+DrqCgaqErKyqd2HJAo632yo+1gp40HS0ai6ckgVneUN1cL20ipOdU1zO52SHKYL3ixt0tg31pcqd
|
||||
LUNBVRuej3Z2Bs9X1d8Fzq6FVtPHy/gk3KlZ2EULB8cV1CamsZ8vDhd85jVVtb13hCfhquqv6wb8lQIa
|
||||
jz6CnIbzyn2CQE45HBhNnBLNQ45Nkyn00g9C3gKzkzoggUyKTpuuLAolCw/ytQ4R0CPhMorums4aQyZS
|
||||
cqqANkchJvgbyHwDTP0aBC30WEoAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="miNavigBack.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEhSURBVDhPY6A6mDKh6T+xODY66D9UGwKAJE4d2/SfGGBp
|
||||
qoHfAAYVTAwTBwGCBhACBA2YPXs2CkYWAwHauKB41nO4AUePHoVjEEAPCwwDQJrtCi6R54KyOS/+L9j/
|
||||
+79x+rn/OVOe/0/qe/Y/ov0pGDsXnfl/+vTp/5s3bwZjGIAbANK88MDv/91AuV4grl/x43/Vwnf/S2Y8
|
||||
/J/Ycf2/ts8kqBZUADYgb+ojsOYeoMbcef//R/d/+x/a9vK/b/XN/y4FJ/475R7+r+nZDVaMDYNdYBi2
|
||||
6H9E20MMzdap2/8bR6/6r+7WjBna6EArYMF/99JL/zVDVv9X91/0X9V71n9l90lgrOZUR9gAENDwm/tf
|
||||
1XcucYpxARXPaSQYwMAAAN+l4+UuGKMNAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="miNavigForw.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAExSURBVDhPY6AYTJnQ9J9YHBsd9B+qDQFAEqeObfpPDLA0
|
||||
1cBvAIMKJoaJgwBBAwgBggbMnj0bBSOLgQDtXXD06FE4BgH0sCib84IyFxTPfPrfr+woqiHIBuzevRuM
|
||||
X7x4AbatYNqj/xl9t8A4vvXi/6wJt/9nz/r+XztiHcIQXC4omvHk/7LDv//P2/f3/+Ttf/+3rvv3v3bF
|
||||
///5c3/8D2x+ijAEFDDYcM6ke/+n7/zzv2Lp3/+58/7+j5v8539kz6f/wS1P//tU3/jvmHcM1SXoILX7
|
||||
+v+m1X//x0z4/j+q99P/sI43//3r7/33KLv43ynvyH/DsEW4NYNAbPP5/8ruk/6res8CY3X/Rf81Q1b/
|
||||
t8/a/18rYAF+zbiAqu/c/xp+c8nTDAIqntPQNDMwAADW1uqs2ammdwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="miExit.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
|
|
@ -519,42 +567,6 @@
|
|||
8r8T9T8S9YXuKjuciGcpK0avFYn6xn3HwgzWJLE2agIlJCUaYjchErdT8qiG2OznUiIHKdxgzfotHD16
|
||||
QD9hemskM8k75VXwfrUgrFQauzbAtki5DZ5NH4ymbqPBlyM79NkqUXjNbYnAvzkCW5I0CTt3716vTXry
|
||||
LSsF/9bQmSycUeuYKLLK7cq7wZgonDkZ/AKzSRim0NIr5QAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="miOutputWindow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHBSURBVDhPrZJLSxtRGIbnH3XVRTfFVcEuXJaudVtcuHDR
|
||||
IqUg6ULoplJBQWnFihZd1BKxoqlJF1HES9RYTSaTcXKbNGouk7mdZN6e86WGjoGClwMPnMV5H77340h3
|
||||
PiPzRfxL4HMRrz/qGJwo4MVoHr3vcnj+NoueNxniyasWjwc1PBo4g08wPKPj5ZSO/rFW8Fkgi6dDGrr+
|
||||
Pr7Og94opNngNjzP+y8Oa6JmtShVG4RWYnjY3Qdp+muUHl0dcWdND7bj8UADlzUG/dKFVnQIOWcRwY39
|
||||
exbwfSIcDqPBwzcSTC5G2hMIiZxS4bhN1EXYYCiWXWRLLpS8TZycWURbMD637qtwJakYfFkVF/lzF2rB
|
||||
RiJjEUeKSbQFH2a+k0A4RDghp1GtN3BRZShciLFtyFkLcdUk9mSD+LKy1xK8/7Tc3sFa6AcMk4epN0OG
|
||||
d07lxcgmYqk6sX1iENPfdv0Cx/Wod5mP/rvMkCs5SPPOp5qJQ6WOnVOD2IzXiA6B6TRp9PMK470dqLqN
|
||||
JO8cT/Oxkwa2jmvEz4Mq4ROIn/YrqSJ2nMZWTEFkR8FqVMZSJImFUAKzq534BOJyW/ju7nIk6Q+B49+g
|
||||
+BQZbgAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="miNavigBack.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEhSURBVDhPY6A6mDKh6T+xODY66D9UGwKAJE4d2/SfGGBp
|
||||
qoHfAAYVTAwTBwGCBhACBA2YPXs2CkYWAwHauKB41nO4AUePHoVjEEAPCwwDQJrtCi6R54KyOS/+L9j/
|
||||
+79x+rn/OVOe/0/qe/Y/ov0pGDsXnfl/+vTp/5s3bwZjGIAbANK88MDv/91AuV4grl/x43/Vwnf/S2Y8
|
||||
/J/Ycf2/ts8kqBZUADYgb+ojsOYeoMbcef//R/d/+x/a9vK/b/XN/y4FJ/475R7+r+nZDVaMDYNdYBi2
|
||||
6H9E20MMzdap2/8bR6/6r+7WjBna6EArYMF/99JL/zVDVv9X91/0X9V71n9l90lgrOZUR9gAENDwm/tf
|
||||
1XcucYpxARXPaSQYwMAAAN+l4+UuGKMNAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="miNavigForw.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAExSURBVDhPY6AYTJnQ9J9YHBsd9B+qDQFAEqeObfpPDLA0
|
||||
1cBvAIMKJoaJgwBBAwgBggbMnj0bBSOLgQDtXXD06FE4BgH0sCib84IyFxTPfPrfr+woqiHIBuzevRuM
|
||||
X7x4AbatYNqj/xl9t8A4vvXi/6wJt/9nz/r+XztiHcIQXC4omvHk/7LDv//P2/f3/+Ttf/+3rvv3v3bF
|
||||
///5c3/8D2x+ijAEFDDYcM6ke/+n7/zzv2Lp3/+58/7+j5v8539kz6f/wS1P//tU3/jvmHcM1SXoILX7
|
||||
+v+m1X//x0z4/j+q99P/sI43//3r7/33KLv43ynvyH/DsEW4NYNAbPP5/8ruk/6res8CY3X/Rf81Q1b/
|
||||
t8/a/18rYAF+zbiAqu/c/xp+c8nTDAIqntPQNDMwAADW1uqs2ammdwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="miRunNoDebug.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
|
|
@ -674,7 +686,7 @@
|
|||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABK
|
||||
FQAAAk1TRnQBSQFMAgEBEAEAAbQBAAG0AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
FQAAAk1TRnQBSQFMAgEBEAEAAbwBAAG8AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAAVADAAEBAQABCAYAARQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
|
|
|
|||
|
|
@ -49,6 +49,16 @@ namespace VisualPascalABC
|
|||
stand_types["object"] = typeof(object);
|
||||
}
|
||||
|
||||
public static bool Is32BitAssembly()
|
||||
{
|
||||
if (!Environment.Is64BitProcess)
|
||||
return false;
|
||||
System.Reflection.PortableExecutableKinds peKind;
|
||||
System.Reflection.ImageFileMachine machine;
|
||||
a.ManifestModule.GetPEKind(out peKind, out machine);
|
||||
return peKind == System.Reflection.PortableExecutableKinds.Required32Bit;
|
||||
}
|
||||
|
||||
public static void LoadAssembly(string file_name)
|
||||
{
|
||||
//ad = AppDomain.CreateDomain("DebugDomain",null,Path.GetDirectoryName(file_name),Path.GetDirectoryName(file_name),false);
|
||||
|
|
@ -59,7 +69,7 @@ namespace VisualPascalABC
|
|||
fs.Read(buf, 0, (int)fs.Length);
|
||||
fs.Close();
|
||||
a = System.Reflection.Assembly.Load(buf);
|
||||
|
||||
|
||||
Type[] tt = a.GetTypes();
|
||||
foreach (Type t in tt)
|
||||
{
|
||||
|
|
@ -426,6 +436,7 @@ namespace VisualPascalABC
|
|||
ExeFileName = null;
|
||||
WorkbenchServiceFactory.OperationsService.ClearTabStack();
|
||||
WorkbenchServiceFactory.DebuggerOperationsService.ClearDebugTabs();
|
||||
WorkbenchServiceFactory.Workbench.DisassemblyWindow.ClearWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -470,7 +481,10 @@ namespace VisualPascalABC
|
|||
SelectProcess(debuggedProcess);
|
||||
//debuggedProcess.Break();
|
||||
}
|
||||
|
||||
|
||||
Function currentFunction;
|
||||
Dictionary<int, int> sourceMap;
|
||||
|
||||
void debuggedProcess_DebuggeeStateChanged(object sender, ProcessEventArgs e)
|
||||
{
|
||||
if (currentBreakpoint != null)
|
||||
|
|
@ -484,6 +498,16 @@ namespace VisualPascalABC
|
|||
//if (e.Process.IsPaused)
|
||||
WorkbenchServiceFactory.DebuggerOperationsService.RefreshPad(new FunctionItem(e.Process.SelectedFunction).SubItems);
|
||||
workbench.WidgetController.SetStartDebugEnabled();
|
||||
if (currentFunction != e.Process.SelectedFunction)
|
||||
{
|
||||
if (WorkbenchServiceFactory.Workbench.DisassemblyWindow.IsVisible)
|
||||
{
|
||||
var tp = GetNativeCodeOfSelectedFunction(e.Process.SelectedFunction);
|
||||
WorkbenchServiceFactory.DebuggerOperationsService.DisplayDisassembledCode(tp.Item1);
|
||||
sourceMap = tp.Item2;
|
||||
currentFunction = e.Process.SelectedFunction;
|
||||
}
|
||||
}
|
||||
if (debuggerStateEvent != null)
|
||||
debuggerStateEvent(this, new ProcessEventArgsDelegator(new ProcessDelegator(this.debuggedProcess)));
|
||||
}
|
||||
|
|
@ -586,15 +610,16 @@ namespace VisualPascalABC
|
|||
show_debug_tabs = true;
|
||||
workbench.WidgetController.SetPlayButtonsVisible(false);
|
||||
workbench.WidgetController.SetAddExprMenuVisible(false);
|
||||
workbench.WidgetController.SetDisassemblyMenuVisible(false);
|
||||
DebugWatchListWindowForm.WatchWindow.ClearAllSubTrees();
|
||||
IsRunning = false;
|
||||
workbench.WidgetController.SetDebugStopDisabled();
|
||||
workbench.WidgetController.ChangeContinueDebugNameOnStart();
|
||||
//if (cur_brpt != null) dbg.RemoveBreakpoint(cur_brpt);
|
||||
CurrentLineBookmark.Remove();
|
||||
WorkbenchServiceFactory.DebuggerOperationsService.ClearLocalVarTree();
|
||||
WorkbenchServiceFactory.DebuggerOperationsService.ClearDebugTabs();
|
||||
WorkbenchServiceFactory.DebuggerOperationsService.ClearWatch();
|
||||
WorkbenchServiceFactory.Workbench.DisassemblyWindow.ClearWindow();
|
||||
workbench.WidgetController.SetDebugTabsVisible(false);
|
||||
WorkbenchServiceFactory.OperationsService.ClearTabStack();
|
||||
workbench.WidgetController.EnableCodeCompletionToolTips(true);
|
||||
|
|
@ -635,6 +660,7 @@ namespace VisualPascalABC
|
|||
workbench.WidgetController.ChangeStartDebugNameOnContinue();
|
||||
workbench.WidgetController.EnableCodeCompletionToolTips(false);
|
||||
workbench.WidgetController.SetAddExprMenuVisible(true);
|
||||
workbench.WidgetController.SetDisassemblyMenuVisible(true);
|
||||
TooltipServiceManager.hideToolTip();
|
||||
IsRunning = true;
|
||||
evaluator = new ExpressionEvaluator(e.Process,workbench.VisualEnvironmentCompiler, FileName);
|
||||
|
|
@ -946,7 +972,78 @@ namespace VisualPascalABC
|
|||
}
|
||||
|
||||
private int curILOffset = 0;
|
||||
|
||||
|
||||
struct COR_DEBUG_IL_TO_NATIVE_MAP
|
||||
{
|
||||
public uint ilOffset;
|
||||
public uint nativeStartOffset;
|
||||
public uint nativeEndOffset;
|
||||
}
|
||||
|
||||
public Tuple<string, Dictionary<int, int>> GetNativeCodeOfSelectedFunction(Function selectedFunction=null)
|
||||
{
|
||||
if (selectedFunction == null)
|
||||
selectedFunction = debuggedProcess.SelectedFunction;
|
||||
uint size = selectedFunction.CorFunction.NativeCode.Size;
|
||||
byte[] buffer = new byte[size];
|
||||
uint mapSize;
|
||||
COR_DEBUG_IL_TO_NATIVE_MAP[] mapBuffer = new COR_DEBUG_IL_TO_NATIVE_MAP[selectedFunction.CorFunction.ILCode.Size];
|
||||
unsafe
|
||||
{
|
||||
fixed (byte* ptr = &buffer[0])
|
||||
{
|
||||
IntPtr iptr = new IntPtr((void*)ptr);
|
||||
selectedFunction.CorFunction.NativeCode.GetCode(0, size, size, iptr);
|
||||
}
|
||||
fixed (void* ptr = &mapBuffer[0])
|
||||
{
|
||||
IntPtr iptr = new IntPtr(ptr);
|
||||
selectedFunction.CorFunction.NativeCode.GetILToNativeMapping((uint)mapBuffer.Length, out mapSize, iptr);
|
||||
}
|
||||
}
|
||||
Dictionary<uint, uint> il2asm = new Dictionary<uint, uint>();
|
||||
for (int i = 0; i < mapSize; i++)
|
||||
{
|
||||
il2asm.Add(mapBuffer[i].nativeStartOffset, mapBuffer[i].ilOffset);
|
||||
}
|
||||
SharpDisasm.Disassembler disasm = new SharpDisasm.Disassembler(buffer, AssemblyHelper.Is32BitAssembly()?SharpDisasm.ArchitectureMode.x86_32: SharpDisasm.ArchitectureMode.x86_64);
|
||||
IEnumerable<SharpDisasm.Instruction> instructions = disasm.Disassemble();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int linesNum = 0;
|
||||
Dictionary<int, int> sourceMap = new Dictionary<int, int>();
|
||||
Dictionary<int, int> linesDict = new Dictionary<int, int>();
|
||||
bool firstLine = true;
|
||||
foreach (var instruction in instructions)
|
||||
{
|
||||
linesNum++;
|
||||
|
||||
uint ilOffset;
|
||||
if (il2asm.TryGetValue((uint)instruction.Offset, out ilOffset))
|
||||
{
|
||||
var segment = selectedFunction.GetSegmentForOffet(ilOffset);
|
||||
|
||||
if (segment != null && !linesDict.ContainsKey(segment.StartLine))
|
||||
{
|
||||
if (ilOffset > 2000000000)
|
||||
{
|
||||
if (firstLine)
|
||||
continue;
|
||||
}
|
||||
else
|
||||
firstLine = false;
|
||||
int line = segment.StartLine;
|
||||
string text = curPage.TextEditor.Document.GetText(curPage.TextEditor.Document.GetLineSegment(line - 1));
|
||||
sb.AppendLine((segment.StartLine+":").PadRight(10, ' ') + text.Trim());
|
||||
linesDict.Add(segment.StartLine, segment.StartLine);
|
||||
}
|
||||
}
|
||||
sb.Append("///"+selectedFunction.CorFunction.NativeCode.Address.ToString("X") + "+0x"+instruction.Offset.ToString("X") + ": " + instruction.ToString());
|
||||
sb.AppendLine();
|
||||
|
||||
}
|
||||
return new Tuple<string, Dictionary<int, int>>(sb.ToString(),sourceMap);
|
||||
}
|
||||
|
||||
public void DoInPausedState(MethodInvoker action)
|
||||
{
|
||||
Debugger.Process process = debuggedProcess;
|
||||
|
|
|
|||
BIN
VisualPascalABCNET/Resources/Icons.16x16.Disassembly.png
Normal file
BIN
VisualPascalABCNET/Resources/Icons.16x16.Disassembly.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 509 B |
|
|
@ -50,6 +50,7 @@
|
|||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
<RunCodeAnalysis>false</RunCodeAnalysis>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>PdbOnly</DebugType>
|
||||
|
|
@ -60,6 +61,7 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||
|
|
@ -93,6 +95,10 @@
|
|||
<Reference Include="Microsoft.Build.Tasks" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="SharpDisasm, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c6f10d5f3df8ab7, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\bin\SharpDisasm.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
|
|
@ -155,6 +161,12 @@
|
|||
<Compile Include="DockContent\DebugWatchListWindowForm.Designer.cs">
|
||||
<DependentUpon>DebugWatchListWindowForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="DockContent\DisassemblyWindow.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DockContent\DisassemblyWindow.Designer.cs">
|
||||
<DependentUpon>DisassemblyWindow.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="DockContent\ImmediateWindow.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
|
|
@ -666,6 +678,7 @@
|
|||
<None Include="Resources\FormsDesignerPointerIcon.png" />
|
||||
<None Include="Resources\browserNavigBack.Image.png" />
|
||||
<Content Include="Resources\FormsDesignerPointerIcon.bmp" />
|
||||
<EmbeddedResource Include="Resources\Icons.16x16.Disassembly.png" />
|
||||
<Content Include="Resources\Pointer.bmp" />
|
||||
<None Include="Resources\PrintHS.bmp" />
|
||||
<None Include="Resources\PrintHS.png" />
|
||||
|
|
@ -783,7 +796,7 @@
|
|||
<Name>ParserTools</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\PluginsSupport\PluginsSupport.csproj">
|
||||
<Project>{CFC683F8-0165-4A9F-9C3F-BB8C5BAB507F}</Project>
|
||||
<Project>{cfc683f8-0165-4a9f-9c3f-bb8c5bab507f}</Project>
|
||||
<Name>PluginsSupport</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\SyntaxTree\SyntaxTree.csproj">
|
||||
|
|
|
|||
|
|
@ -243,6 +243,32 @@ namespace VisualPascalABC
|
|||
|
||||
}
|
||||
|
||||
public bool DisassemblyWindowVisible
|
||||
{
|
||||
get
|
||||
{
|
||||
return DisassemblyWindow != null && DisassemblyWindow.Visible;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
if (DisassemblyWindow == null)
|
||||
{
|
||||
AddDisassemblyWindow();
|
||||
}
|
||||
else
|
||||
{
|
||||
//ShowContent(PropertiesWindow, false);
|
||||
DisassemblyWindow.Show();
|
||||
DisassemblyWindow.ShowDisassembly();
|
||||
//PropertiesWindow.IsHidden = false; //Show(MainDockPanel, DockState.Hidden);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public bool PropertiesWindowVisible
|
||||
{
|
||||
get
|
||||
|
|
@ -457,6 +483,11 @@ namespace VisualPascalABC
|
|||
{
|
||||
}
|
||||
|
||||
public void SetDisassemblyMenuVisible(bool flag)
|
||||
{
|
||||
tsDisassembly.Visible = flag;
|
||||
}
|
||||
|
||||
public void SetPlayButtonsVisible(bool start)
|
||||
{
|
||||
if (play_pause_buttons_visible)
|
||||
|
|
|
|||
|
|
@ -82,6 +82,17 @@ namespace VisualPascalABC
|
|||
AddWindowToDockPanel(DebugVariablesListWindow, MainDockPanel, OutputWindow.Dock, DockState.DockBottom, OutputWindow.IsFloat, BottomPane, int.MaxValue);
|
||||
}
|
||||
|
||||
void AddDisassemblyWindow()
|
||||
{
|
||||
if (DisassemblyWindow == null)
|
||||
{
|
||||
DisassemblyWindow = new DisassemblyWindow(this);
|
||||
Form1StringResources.SetTextForAllControls(DisassemblyWindow);
|
||||
}
|
||||
|
||||
AddWindowToDockPanel(DisassemblyWindow, MainDockPanel, OutputWindow.Dock, DockState.DockBottom, OutputWindow.IsFloat, BottomPane, int.MaxValue);
|
||||
}
|
||||
|
||||
void AddDebugWatchListWindow()
|
||||
{
|
||||
if (DebugWatchListWindow == null)
|
||||
|
|
@ -166,7 +177,7 @@ namespace VisualPascalABC
|
|||
else PropertiesWindowVisible = true;
|
||||
}
|
||||
|
||||
private CodeFileDocumentControl AddNewTab(DockPanel tabControl)
|
||||
private CodeFileDocumentControl AddNewTab(DockPanel tabControl, DockStyle dockStyle = DockStyle.Fill)
|
||||
{
|
||||
CodeFileDocumentControl tp = new CodeFileDocumentControl(this);
|
||||
//tp.BorderStyle=BorderStyle.Fixed3D;
|
||||
|
|
@ -174,7 +185,7 @@ namespace VisualPascalABC
|
|||
RichTextBox tb = OutputWindow.outputTextBox;
|
||||
if (OpenDocuments.Count > 0)
|
||||
tb = CopyTextBox(OutputWindow.outputTextBox);
|
||||
AddWindowToDockPanel(tp, tabControl, tp.Dock, DockState.Document, tp.IsFloat, null, 0);
|
||||
AddWindowToDockPanel(tp, tabControl, tp.Dock != dockStyle?dockStyle:tp.Dock, DockState.Document, tp.IsFloat, null, 0);
|
||||
OutputTextBoxs.Add(tp, tb);
|
||||
|
||||
WorkbenchServiceFactory.CodeCompletionParserController.ParseInformationUpdated += tp.TextEditor.UpdateFolding;
|
||||
|
|
@ -311,6 +322,7 @@ namespace VisualPascalABC
|
|||
AddCompilerConsoleWindow();
|
||||
AddFindSymbolsResultWindow();
|
||||
AddImmediateWindow();
|
||||
AddDisassemblyWindow();
|
||||
AddDebugVariablesListWindow();
|
||||
AddDebugWatchListWindow();
|
||||
if (!Tools.IsUnix())
|
||||
|
|
@ -326,6 +338,7 @@ namespace VisualPascalABC
|
|||
HideContent(DebugVariablesListWindow);
|
||||
HideContent(DebugWatchListWindow);
|
||||
HideContent(FindSymbolsResultWindow);
|
||||
HideContent(DisassemblyWindow);
|
||||
if (!Tools.IsUnix())
|
||||
{
|
||||
HideContent(PropertiesWindow);
|
||||
|
|
@ -624,6 +637,11 @@ namespace VisualPascalABC
|
|||
}
|
||||
}
|
||||
|
||||
public void DisplayDisassembledCode(string code)
|
||||
{
|
||||
DisassemblyWindow.SetDisassembledCode(code);
|
||||
}
|
||||
|
||||
public void ClearDebugTabs()
|
||||
{
|
||||
foreach (TextArea ta in DebugTabs.Values)
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -131,6 +131,7 @@ M_COLLAPSE_REGIONS=Collapse regions
|
|||
TP_WARNINGLIST=Warnings
|
||||
TP_VARLIST=Local Variables
|
||||
TP_WATCHLIST=Watch List
|
||||
TP_DISASSEMBLY=Disassembly window
|
||||
TP_FIND_SYMBOL_RESULTS=Search Results
|
||||
CLMN_VAR=Var
|
||||
CLMN_TYPE=Type
|
||||
|
|
|
|||
|
|
@ -131,6 +131,7 @@ M_COLLAPSE_REGIONS=Свернуть все регионы
|
|||
TP_WARNINGLIST=Предупреждения
|
||||
TP_VARLIST=Локальные переменные
|
||||
TP_WATCHLIST=Просмотр выражений
|
||||
TP_DISASSEMBLY=Окно дизассемблирования
|
||||
TP_FIND_SYMBOL_RESULTS=Результат поиска символов
|
||||
CLMN_VAR=Переменная
|
||||
CLMN_TYPE=Тип
|
||||
|
|
|
|||
BIN
bin/SharpDisasm.dll
Normal file
BIN
bin/SharpDisasm.dll
Normal file
Binary file not shown.
Loading…
Reference in a new issue