Ejemplo n.º 1
0
        private int GetActiveConnectionCount(ClrObject connectionPool)
        {
            var      connections           = connectionPool.ReadObjectField("_objectList");
            ClrArray dbConnectionInternals = connections.ReadObjectField("_items").AsArray();
            int      openConnections       = 0;

            for (int i = 0; i < dbConnectionInternals.Length; i++)
            {
                var  SqlInternalConnectionTds = dbConnectionInternals.GetObjectValue(i);
                bool isConnectioOpen          = false;
                try
                {
                    isConnectioOpen = SqlInternalConnectionTds.ReadField <bool>("_fConnectionOpen");
                }
                catch (Exception e)
                {
                    PrintDebugMessage($"Exception while processing active connections {e.Message}");
                    //the array can have null objects. We will be catching them here.
                }
                if (isConnectioOpen)
                {
                    openConnections++;
                }
            }
            return(openConnections);
        }
Ejemplo n.º 2
0
        public void Length_WhenReferenceArrayWithBlanks_ReturnsExpected()
        {
            // Arrange
            ClrArray referenceArraySnapshot = _arrayHolder
                                              .ReadObjectField(nameof(ArrayConnection.ArraysHolder.ReferenceArrayWithBlanks)).AsArray();

            // Act & Assert
            Assert.Equal(_prototype.ReferenceArrayWithBlanks.Length, referenceArraySnapshot.Length);
        }
Ejemplo n.º 3
0
        public void Length_WhenCustomStructArray_ReturnsExpected()
        {
            // Arrange
            ClrArray customStructArray = _arrayHolder
                                         .ReadObjectField(nameof(ArrayConnection.ArraysHolder.StructArray)).AsArray();

            // Act & Assert
            Assert.Equal(_prototype.StructArray.Length, customStructArray.Length);
        }
Ejemplo n.º 4
0
        public void Length_WhenDateTimeArray_ReturnsExpected()
        {
            // Arrange
            ClrArray dateTimeArray = _arrayHolder
                                     .ReadObjectField(nameof(ArrayConnection.ArraysHolder.DateTimeArray)).AsArray();

            // Act & Assert
            Assert.Equal(_prototype.DateTimeArray.Length, dateTimeArray.Length);
        }
Ejemplo n.º 5
0
        public void Length_WhenPrimitiveValueTypeArray_ReturnsExpected()
        {
            // Arrange
            ClrArray intArraySnapshot = _arrayHolder
                                        .ReadObjectField(nameof(ArrayConnection.ArraysHolder.IntArray)).AsArray();

            // Act & Assert
            Assert.Equal(_prototype.IntArray.Length, intArraySnapshot.Length);
        }
Ejemplo n.º 6
0
        public void Length_WhenStringArray_ReturnsExpected()
        {
            // Arrange
            ClrArray referenceArraySnapshot = _arrayHolder
                                              .GetObjectField(nameof(ArrayConnection.ArraysHolder.StringArray)).AsArray();

            // Act & Assert
            Assert.Equal(_prototype.StringArray.Length, referenceArraySnapshot.Length);
        }
Ejemplo n.º 7
0
        public void Length_WhenGuidArray_ReturnsExpected()
        {
            // Arrange
            ClrArray guidArray = _arrayHolder
                                 .GetObjectField(nameof(ArrayConnection.ArraysHolder.GuidArray)).AsArray();

            // Act & Assert
            Assert.Equal(_prototype.GuidArray.Length, guidArray.Length);
        }
Ejemplo n.º 8
0
        private Dictionary <string, string> GetParameters(ClrArray parameters)
        {
            Dictionary <string, string> parameterValues = new Dictionary <string, string>();

            for (int i = 0; i < parameters.Length; i++)
            {
                ClrObject parameter = parameters.GetObjectValue(i);
                if (parameter.Address != 0)
                {
                    string parameterName  = parameter.ReadStringField("_parameterName");
                    string parameterValue = "";
                    if (parameter.ReadObjectField("_value").Address != 0)
                    {
                        switch (parameter.ReadObjectField("_value").Type.Name)
                        {
                        case "System.Int64":
                            parameterValue = parameter.ReadField <Int64>("_value").ToString();
                            break;

                        case "System.String":
                            parameterValue = parameter.ReadObjectField("_value").AsString();
                            break;

                        case "System.Int32":
                            parameterValue = parameter.ReadField <Int32>("_value").ToString();
                            break;

                        case "System.DateTime":
                            parameterValue = parameter.ReadField <DateTime>("_value").ToString();
                            break;

                        case "System.Double":
                            parameterValue = parameter.ReadField <Double>("_value").ToString();
                            break;

                        case "System.Boolean":
                            parameterValue = parameter.ReadField <Boolean>("_value").ToString();
                            break;

                        default:
                            parameterValue = "cannot be read";
                            break;
                        }
                    }

                    if (!string.IsNullOrEmpty(parameterValue) && !string.IsNullOrEmpty(parameterName))
                    {
                        parameterValues.Add(parameterName, parameterValue);
                    }
                }
            }
            return(parameterValues);
        }
Ejemplo n.º 9
0
    static void Main(string[] args)
    {
        if (args.Length != 3)
        {
            Console.WriteLine("Usage: DumpDict [dump] [objref]");
            Environment.Exit(1);
        }

        if (ulong.TryParse(args[2], System.Globalization.NumberStyles.HexNumber, null, out ulong objAddr))
        {
            Console.WriteLine($"Could not parse object ref '{args[2]}'.");
            Environment.Exit(1);
        }

        string dumpFileName = args[0];
        string dacPath      = args[1];

        using DataTarget dataTarget = DataTarget.LoadDump(dumpFileName);
        using ClrRuntime runtime    = dataTarget.ClrVersions.Single().CreateRuntime();
        ClrHeap heap = runtime.Heap;

        ClrObject obj = heap.GetObject(objAddr);

        if (!obj.IsValidObject)
        {
            Console.WriteLine("Invalid object {0:X}", obj);
            return;
        }

        if (!obj.Type.Name.StartsWith("System.Collections.Generic.Dictionary"))
        {
            Console.WriteLine("Error: Expected object {0:X} to be a dictionary, instead it's of type '{1}'.");
            return;
        }

        // Get the entries field.
        ClrArray entries = obj.ReadObjectField("entries").AsArray();

        Console.WriteLine("{0,8} {1,16} : {2}", "hash", "key", "value");
        for (int i = 0; i < entries.Length; ++i)
        {
            ClrObject entry = entries.GetObjectValue(i);

            // TODO: Need to handle non-object references
            int       hashCode = entry.ReadField <int>("hashCode");
            ClrObject key      = entry.ReadObjectField("key");
            ClrObject value    = entry.ReadObjectField("value");

            Console.WriteLine($"{hashCode:x} {key} -> {value}");
        }
    }
Ejemplo n.º 10
0
        public static IEnumerable <ClrObject> EnumerateObjectItems(ClrArray array)
        {
            var length = array.Length;

            if (length == 0)
            {
                yield break;
            }

            for (int itemIndex = 0; itemIndex < length; itemIndex++)
            {
                yield return(array.GetObjectValue(itemIndex));
            }
        }
Ejemplo n.º 11
0
        private IEnumerable <SqlCommandInfo> GetSqlCommandInfo()
        {
            List <ClrObject> commandObjects = new List <ClrObject>();

            commandObjects.AddRange(FilterObjectByType("System.Data.SqlClient.SqlCommand"));
            commandObjects.AddRange(FilterObjectByType("Microsoft.Data.SqlClient.SqlCommand"));

            if (commandObjects.Count != 0)
            {
                foreach (ClrObject commandObject in commandObjects)
                {
                    string    commandString    = commandObject.ReadStringField("_commandText");
                    string    connectionString = commandObject.ReadObjectField("_activeConnection").ReadStringField("_connectionString");
                    ClrObject paramsObject     = commandObject.ReadObjectField("_parameters");
                    int       connState        = commandObject.ReadObjectField("_activeConnection").ReadObjectField("_innerConnection").ReadField <int>("_state");
                    string    connectionState  = "Open";
                    if (connState == 0)
                    {
                        connectionState = "Closed";
                    }

                    Dictionary <string, string> parameters = new Dictionary <string, string>();
                    if (paramsObject.Address != 0)
                    {
                        ClrArray paramsArray = paramsObject.ReadObjectField("_items").ReadObjectField("_items").AsArray();
                        parameters = GetParameters(paramsArray);
                    }

                    yield return(parameters.Count == 0
                        ? new SqlCommandInfo {
                        CommandString = commandString, ConnectionString = connectionString, Parameters = null, ConnectionState = connectionState
                    }
                        : new SqlCommandInfo {
                        CommandString = commandString, ConnectionString = commandString, Parameters = parameters, ConnectionState = connectionState
                    });
                }
            }
            else
            {
                yield break;
            }
        }
Ejemplo n.º 12
0
        private static bool HasSimpleValue(ClrArray items, int index, ClrValueType item, out string content)
        {
            content = null;
            var typeName = item.Type.Name;

            switch (typeName)
            {
            case "System.Char":
                content = $"'{items.GetValue<System.Char>(index)}'";
                break;

            case "System.Boolean":
                content = items.GetValue <System.Boolean>(index).ToString();
                break;

            case "System.SByte":
                content = items.GetValue <System.SByte>(index).ToString();
                break;

            case "System.Byte":
                content = items.GetValue <System.Byte>(index).ToString();
                break;

            case "System.Int16":
                content = items.GetValue <System.Int16>(index).ToString();
                break;

            case "System.UInt16":
                content = items.GetValue <System.UInt16>(index).ToString();
                break;

            case "System.Int32":
                content = items.GetValue <System.Int32>(index).ToString();
                break;

            case "System.UInt32":
                content = items.GetValue <System.UInt32>(index).ToString();
                break;

            case "System.Int64":
                content = items.GetValue <System.Int64>(index).ToString();
                break;

            case "System.UInt64":
                content = items.GetValue <System.UInt64>(index).ToString();
                break;

            case "System.Single":
                content = items.GetValue <System.Single>(index).ToString();
                break;

            case "System.Double":
                content = items.GetValue <System.Double>(index).ToString();
                break;

            case "System.IntPtr":
            {
                var val = items.GetValue <System.IntPtr>(index);
                content = (val == IntPtr.Zero) ? "null" : $"0x{val.ToInt64():x16}";
            }
            break;

            case "System.UIntPtr":
            {
                var val = items.GetValue <System.UIntPtr>(index);
                content = (val == UIntPtr.Zero) ? "null" : $"0x{val.ToUInt64():x16}";
            }
            break;

            default:
                return(false);
            }

            return(true);
        }
Ejemplo n.º 13
0
 public ArrayProxy(RuntimeContext context, ClrObject targetObject)
     : base(context, targetObject)
 {
     _clrArray = TargetObject.AsArray();
 }
Ejemplo n.º 14
0
 public ArrayProxy(RuntimeContext context, ulong address)
     : base(context, address)
 {
     _clrArray = TargetObject.AsArray();
 }