public MemoryInfoView(MiniDumpMemoryInfoStream memoryInfoStream, MiniDumpFile minidumpFile) : this() { _memoryInfoStream = memoryInfoStream; _minidumpFile = minidumpFile; if (_memoryInfoStream.NumberOfEntries == 0) { this.listView1.Items.Add("No data found for stream"); } else { List <ListViewItem> listItems = new List <ListViewItem>(); foreach (MiniDumpMemoryInfo memoryInfo in _memoryInfoStream.Entries) { ListViewItem newItem = new ListViewItem(Formatters.FormatAsMemoryAddress(memoryInfo.BaseAddress)); newItem.Tag = memoryInfo; // If the state is MEM_FREE then AllocationProtect, RegionSize, Protect and Type are undefined. if (memoryInfo.State == MemoryState.MEM_FREE) { newItem.SubItems.Add(string.Empty); newItem.SubItems.Add(string.Empty); newItem.SubItems.Add(memoryInfo.RegionSizePretty); newItem.SubItems.Add(memoryInfo.State.ToString()); newItem.SubItems.Add(string.Empty); newItem.SubItems.Add(string.Empty); } else { newItem.SubItems.Add(Formatters.FormatAsMemoryAddress(memoryInfo.AllocationBase)); newItem.SubItems.Add(memoryInfo.AllocationProtect.ToString()); newItem.SubItems.Add(memoryInfo.RegionSizePretty); newItem.SubItems.Add(memoryInfo.State.ToString()); // Some regions don't have any Protection information newItem.SubItems.Add(((int)memoryInfo.Protect == 0) ? string.Empty : memoryInfo.Protect.ToString()); newItem.SubItems.Add(memoryInfo.Type.ToString()); } listItems.Add(newItem); } listView1.AddItemsForFiltering(listItems); } }
private void CmdDisplayStream(string streamName) { UserControl viewToDisplay = null; int numberOfItems = 0; string nodeText = String.Empty; // Quick fix for duplicated item counts in node text switch (streamName) { case "Summary": nodeText = string.Empty; viewToDisplay = new SummaryView(_miniDumpFile); break; case "Handles": nodeText = "Handles"; MiniDumpHandleDescriptor[] handleData = this._miniDumpFile.ReadHandleData(); numberOfItems = handleData.Length; viewToDisplay = new HandleDataView(handleData); break; case "Modules": nodeText = "Modules"; MiniDumpModule[] moduleData = this._miniDumpFile.ReadModuleList(); numberOfItems = moduleData.Length; viewToDisplay = new ModulesView(moduleData); break; case "Threads": nodeText = "Threads"; MiniDumpThread[] threadData = this._miniDumpFile.ReadThreadList(); numberOfItems = threadData.Length; viewToDisplay = new ThreadListView(threadData); break; case "ThreadInfo": nodeText = "ThreadInfo"; MiniDumpThreadInfo[] threadInfoData = this._miniDumpFile.ReadThreadInfoList(); numberOfItems = threadInfoData.Length; viewToDisplay = new ThreadInfoListView(threadInfoData); break; case "ThreadNames": nodeText = "ThreadNames"; MiniDumpThreadNamesStream threadNamesStream = this._miniDumpFile.ReadThreadNamesStream(); numberOfItems = threadNamesStream.Entries.Count; viewToDisplay = new ThreadNamesView(threadNamesStream); break; case "Memory": nodeText = "Memory"; MiniDumpMemoryDescriptor[] memoryData = this._miniDumpFile.ReadMemoryList(); numberOfItems = memoryData.Length; viewToDisplay = new MemoryListView(memoryData); break; case "Memory64": nodeText = "Memory64"; MiniDumpMemory64Stream memory64Data = this._miniDumpFile.ReadMemory64List(); numberOfItems = memory64Data.MemoryRanges.Length; viewToDisplay = new MemoryList64View(memory64Data.MemoryRanges); break; case "MemoryInfo": nodeText = "MemoryInfo"; MiniDumpMemoryInfoStream memoryInfo = this._miniDumpFile.ReadMemoryInfoList(); numberOfItems = memoryInfo.Entries.Length; viewToDisplay = new MemoryInfoView(memoryInfo, _miniDumpFile); break; case "MiscInfo": nodeText = "MiscInfo"; MiniDumpMiscInfo miscInfo = this._miniDumpFile.ReadMiscInfo(); numberOfItems = 1; viewToDisplay = new MiscInfoView(miscInfo); break; case "SystemInfo": nodeText = "SystemInfo"; MiniDumpSystemInfoStream systemInfo = this._miniDumpFile.ReadSystemInfo(); numberOfItems = 1; viewToDisplay = new SystemInfoView(systemInfo); break; case "Exception": nodeText = "Exception"; MiniDumpExceptionStream exceptionStream = this._miniDumpFile.ReadExceptionStream(); numberOfItems = (exceptionStream == null) ? 0 : 1; viewToDisplay = new ExceptionStreamView(exceptionStream); break; case "UnloadedModules": nodeText = "UnloadedModules"; MiniDumpUnloadedModulesStream unloadedModulesStream = this._miniDumpFile.ReadUnloadedModuleList(); numberOfItems = (int)unloadedModulesStream.NumberOfEntries; viewToDisplay = new UnloadedModulesView(unloadedModulesStream); break; case "SystemMemoryInfo": nodeText = "SystemMemoryInfo"; MiniDumpSystemMemoryInfo systemMemoryInfo = this._miniDumpFile.ReadSystemMemoryInfo(); numberOfItems = 1; viewToDisplay = new SystemMemoryInfoView(systemMemoryInfo); break; case "CommentW": nodeText = "CommentW"; MiniDumpCommentStreamW commentWStream = this._miniDumpFile.ReadCommentStreamW(); numberOfItems = string.IsNullOrEmpty(commentWStream.Comment) ? 0 : 1; viewToDisplay = new CommentStreamWView(commentWStream); break; } if (viewToDisplay != null) { if (nodeText != string.Empty) { treeView1.SelectedNode.Text = nodeText + " (" + numberOfItems + (numberOfItems == 1 ? " item" : " items") + ")"; } if (this.splitContainer1.Panel2.Controls.Count > 0) { this.splitContainer1.Panel2.Controls.RemoveAt(0); } viewToDisplay.Dock = DockStyle.Fill; this.splitContainer1.Panel2.Controls.Add(viewToDisplay); } }