Exemplo n.º 1
0
        /// <summary>
        /// Executes "watch" command.
        /// </summary>
        /// <param name="parameters">Address of Symbol to watch.</param>
        protected void Watch(string[] parameters)
        {
            if (parameters.Length != 1)
            {
                Console.WriteLine("Invalid parameters for Watch command.");
                return;
            }
            string s = parameters[0];
            long   address;

            try
            { address = long.Parse(s); }
            catch
            {
                DebugSymbol sym;
                if (Debugger.DebugInformation.ByName.TryGetValue(s, out sym))
                {
                    address = sym.Value;
                }
                else
                {
                    Console.WriteLine("Symbol \"" + s + "\" not found.");
                    return;
                }
            }
            MemoryBreakpoint bp = new MemoryBreakpoint(address);

            bp.OnExecute = false;
            bp.OnWrite   = true;
            Debugger.Breakpoints.Add(bp);
            Console.WriteLine("Breakpoint " + Debugger.Breakpoints.IndexOf(bp) + " at " + address + " on Write.");
        }
Exemplo n.º 2
0
        public void MemoryBreakpointsCanCopyToArray()
        {
            MemoryDebugger.AddBreakpoint(new MemoryChangedBreakpoint(0x1234, 1));
            MemoryDebugger.AddBreakpoint(new MemoryValueEqualsBreakpoint(0x2345, 1, 0x55));

            var array = new MemoryBreakpoint[2];

            MemoryDebugger.Breakpoints.CopyTo(array, 0);

            Assert.IsTrue(array[0] is MemoryChangedBreakpoint);
            Assert.IsTrue(array[1] is MemoryValueEqualsBreakpoint);
        }
Exemplo n.º 3
0
 public bool DeleteBreakpoint(MemoryBreakpoint breakpoint)
 {
     Breakpoints.Remove(breakpoint);
     return(true);
 }
Exemplo n.º 4
0
 public bool AddBreakpoint(MemoryBreakpoint breakpoint)
 {
     Breakpoints.Add(breakpoint);
     return(true);
 }
Exemplo n.º 5
0
        /// <summary>
        /// Executes "info" command.
        /// </summary>
        /// <param name="parameters">Either "reg", "r", "break", "breakpoints" or "b".</param>
        protected void Info(string[] parameters)
        {
            bool ok = true;

            if (parameters.Length != 1)
            {
                ok = false;
            }

            string command = parameters[0].ToLower();

            if (command != "reg" && command != "r" &&
                command != "break" && command != "breakpoints" && command != "b")
            {
                ok = false;
            }

            if (!ok)
            {
                Console.WriteLine("Invalid parameters for Info command.");
                return;
            }
            if (command == "reg" || command == "r")
            {
                Console.WriteLine("+----------+----------+");
                Console.WriteLine("|Register  |Value     |");
                Console.WriteLine("+----------+----------+");
                foreach (string reg in Debugger.Target.Registers.Names)
                {
                    Console.Write("|");
                    Console.Write(reg.PadRight(10));
                    Console.Write("|");
                    Console.Write(Debugger.Target.Registers[reg].ToString().PadLeft(10));
                    Console.WriteLine("|");
                }
                Console.WriteLine("+----------+----------+");
            }
            else             // breakpoints
            {
                Console.WriteLine("+--------+----------------+------------+----------+");
                Console.WriteLine("|N       |Address         |On Execute  |On Write  |");
                Console.WriteLine("+--------+----------------+------------+----------+");
                for (int i = 0; i < Debugger.Breakpoints.Count; i++)
                {
                    MemoryBreakpoint bp = Debugger.Breakpoints[i] as MemoryBreakpoint;
                    if (bp == null)
                    {
                        continue;
                    }
                    Console.Write("|");
                    Console.Write(i.ToString().PadRight(8));
                    Console.Write("|");
                    Console.Write(bp.Address.ToString().PadRight(16));
                    Console.Write("|");
                    Console.Write(bp.OnExecute ? "YES         " : "NO          ");
                    Console.Write("|");
                    Console.Write(bp.OnWrite ? "YES       " : "NO        ");
                    Console.WriteLine("|");
                }
                Console.WriteLine("+--------+----------------+------------+----------+");
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Executes "break" command.
        /// </summary>
        /// <param name="parameters">Source code location; or Address or Symbol starting with '*'</param>
        protected void Break(string[] parameters)
        {
            if (parameters.Length != 1 || parameters[0].Length == 0)
            {
                Console.WriteLine("Invalid parameters for Break command.");
                return;
            }
            if (parameters[0][0] == '*')             // Address or label
            {
                string s = parameters[0].Remove(0, 1);
                long   address;
                try
                { address = long.Parse(s); }
                catch
                {
                    DebugSymbol sym;
                    if (Debugger.DebugInformation.ByName.TryGetValue(s, out sym))
                    {
                        address = sym.Value;
                        if (!sym.IsExecutable)
                        {
                            Console.WriteLine("Symbol \"" + s + "\" is not a label.");
                            return;
                        }
                    }
                    else
                    {
                        Console.WriteLine("Symbol \"" + s + "\" not found.");
                        return;
                    }
                }
                MemoryBreakpoint bp = new MemoryBreakpoint(address);
                Debugger.Breakpoints.Add(bp);
                Console.WriteLine("Breakpoint " + Debugger.Breakpoints.IndexOf(bp) + " at " + address + " on Execute.");
            }
            else             // Source line
            {
                string s = parameters[0];
                int    line;
                string file = null;
                try
                { line = int.Parse(s); }
                catch
                {
                    string[] parts = s.Split(':');
                    if (parts.Length != 2)
                    {
                        Console.WriteLine("Invalid parameters for Break command.");
                        return;
                    }

                    try
                    { line = int.Parse(parts[0]); }
                    catch
                    {
                        Console.WriteLine("Invalid parameters for Break command.");
                        return;
                    }

                    file = parts[1];
                }
                MemoryBreakpoint bp;
                try
                {
                    if (file == null)
                    {
                        bp = new MemoryBreakpoint(Debugger, line);
                    }
                    else
                    {
                        bp = new MemoryBreakpoint(Debugger, file, line);
                    }
                }
                catch (DebugSymbolNotFoundException)
                {
                    Console.WriteLine("Debug Symbol not found for specified location.");
                    return;
                }
                Debugger.Breakpoints.Add(bp);
                Console.WriteLine("Breakpoint " + Debugger.Breakpoints.IndexOf(bp) + " at " + bp.Address +
                                  (bp.OnExecute ? " on Execute." : " on Write."));
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// Executes "watch" command.
 /// </summary>
 /// <param name="parameters">Address of Symbol to watch.</param>
 protected void Watch(string[] parameters)
 {
     if (parameters.Length != 1)
     {
         Console.WriteLine("Invalid parameters for Watch command.");
         return;
     }
     string s = parameters[0];
     long address;
     try
     { address = long.Parse(s); }
     catch
     {
         DebugSymbol sym;
         if (Debugger.DebugInformation.ByName.TryGetValue(s, out sym))
         { address = sym.Value; }
         else
         {
             Console.WriteLine("Symbol \"" + s + "\" not found.");
             return;
         }
     }
     MemoryBreakpoint bp = new MemoryBreakpoint(address);
     bp.OnExecute = false;
     bp.OnWrite = true;
     Debugger.Breakpoints.Add(bp);
     Console.WriteLine("Breakpoint " + Debugger.Breakpoints.IndexOf(bp) + " at " + address + " on Write.");
 }
Exemplo n.º 8
0
        /// <summary>
        /// Executes "break" command.
        /// </summary>
        /// <param name="parameters">Source code location; or Address or Symbol starting with '*'</param>
        protected void Break(string[] parameters)
        {
            if (parameters.Length != 1 || parameters[0].Length == 0)
            {
                Console.WriteLine("Invalid parameters for Break command.");
                return;
            }
            if (parameters[0][0] == '*') // Address or label
            {
                string s = parameters[0].Remove(0, 1);
                long address;
                try
                { address = long.Parse(s); }
                catch
                {
                    DebugSymbol sym;
                    if (Debugger.DebugInformation.ByName.TryGetValue(s, out sym))
                    {
                        address = sym.Value;
                        if (!sym.IsExecutable)
                        {
                            Console.WriteLine("Symbol \"" + s + "\" is not a label.");
                            return;
                        }
                    }
                    else
                    {
                        Console.WriteLine("Symbol \"" + s + "\" not found.");
                        return;
                    }
                }
                MemoryBreakpoint bp = new MemoryBreakpoint(address);
                Debugger.Breakpoints.Add(bp);
                Console.WriteLine("Breakpoint " + Debugger.Breakpoints.IndexOf(bp) + " at " + address + " on Execute.");
            }
            else // Source line
            {
                string s = parameters[0];
                int line;
                string file = null;
                try
                { line = int.Parse(s); }
                catch
                {
                    string[] parts = s.Split(':');
                    if (parts.Length != 2)
                    {
                        Console.WriteLine("Invalid parameters for Break command.");
                        return;
                    }

                    try
                    { line = int.Parse(parts[0]); }
                    catch
                    {
                        Console.WriteLine("Invalid parameters for Break command.");
                        return;
                    }

                    file = parts[1];
                }
                MemoryBreakpoint bp;
                try
                {
                    if (file == null)
                    { bp = new MemoryBreakpoint(Debugger, line); }
                    else
                    { bp = new MemoryBreakpoint(Debugger, file, line); }
                }
                catch (DebugSymbolNotFoundException)
                {
                    Console.WriteLine("Debug Symbol not found for specified location.");
                    return;
                }
                Debugger.Breakpoints.Add(bp);
                Console.WriteLine("Breakpoint " + Debugger.Breakpoints.IndexOf(bp) + " at " + bp.Address +
                    (bp.OnExecute ? " on Execute." : " on Write."));
            }
        }
Exemplo n.º 9
0
        public void exportBreakpoints(File f)
        {
            System.IO.StreamWriter @out = null;
            try
            {
                @out = new System.IO.StreamWriter(f);

                IEnumerator <MemoryBreakpoint> it = memoryBreakpoints.GetEnumerator();
                while (it.MoveNext())
                {
                    MemoryBreakpoint mbp = it.Current;

                    string line = "";
                    switch (mbp.Access)
                    {
                    case READ:
                        line += "R ";
                        break;

                    case WRITE:
                        line += "W ";
                        break;

                    case READWRITE:
                        line += "RW ";
                        break;

                    default:
                        // ignore - but should never happen
                        continue;
                    }

                    line += string.Format("0x{0:X8}", mbp.StartAddress);
                    if (mbp.StartAddress != mbp.EndAddress)
                    {
                        line += string.Format(" - 0x{0:X8}", mbp.EndAddress);
                    }
                    line += System.getProperty("line.separator");

                    @out.Write(line);
                }

                if (traceMemoryRead)
                {
                    @out.Write("read|");
                }
                if (traceMemoryWrite)
                {
                    @out.Write("write|");
                }
                if (traceMemoryRead8)
                {
                    @out.Write("read8|");
                }
                if (traceMemoryWrite8)
                {
                    @out.Write("write8|");
                }
                if (traceMemoryRead16)
                {
                    @out.Write("read16|");
                }
                if (traceMemoryWrite16)
                {
                    @out.Write("write16|");
                }
                if (traceMemoryRead32)
                {
                    @out.Write("read32|");
                }
                if (traceMemoryWrite32)
                {
                    @out.Write("write32|");
                }
                if (pauseEmulatorOnMemoryBreakpoint)
                {
                    @out.Write("pause");
                }

                @out.BaseStream.WriteByte(System.getProperty("line.separator"));
            }
            catch (IOException)
            {
                // ignore
            }
            finally
            {
                Utilities.close(@out);
            }
        }
Exemplo n.º 10
0
 public MemoryBreakpointEventArgs(MemoryBreakpoint breakpoint, ushort address, byte value)
 {
     Breakpoint = breakpoint;
     Address    = address;
     Value      = value;
 }