65.9K
CodeProject 正在变化。 阅读更多。
Home

System.Diagnostics 入门

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.23/5 (13投票s)

2003年10月31日

4分钟阅读

viewsIcon

187782

本文帮助您开始了解 System.Diagnostics 命名空间。

引言

以下是 Diagnostics 命名空间中的重要类。

System.Diagnostics.EventLog

此组件提供了写入事件日志、读取事件日志条目以及在网络上创建和删除事件日志和事件源的功能。

一些相关类

     
  • EventLog:提供与 Windows 事件日志的交互
  • EventLogEntry:封装事件日志中的单个记录。此类不可继承。
  • EventLogEntryCollection:定义 EventLogEntry 实例集合的大小和枚举器
  • EventLogInstaller:允许您安装和配置您的应用程序在运行时读取或写入的事件日志。安装实用程序(例如,InstallUtil.exe)在安装事件日志时会调用此类。
  • EventLogPermission:允许控制事件日志的代码访问权限。
  • EventLogPermissionAttribute:允许对事件日志进行声明性权限检查
  • EventLogPermissionEntry:定义为 EventLog 设置的代码访问安全权限的最小单位
  • EventLogPermissionEntryCollection:包含 EventLogPermissionEntry 对象的一个强类型集合
  • EventLogTraceListener:提供一个简单的侦听器,将跟踪或调试输出定向到 EventLog

示例

如何写入事件日志

如下创建 EventLog 类的对象

Dim ev As New EventLog("Application", _ 
    System.Environment.MachineName, "MyAppName")

调用上述类的 WriteEntry 方法。

ev.WriteEntry(“My event text”, _ 
   System.Diagnostics.EventLogEntryType.Information, myeventid)

关闭写入器。

Ev.close

如何从事件日志读取

如下创建 EventLog 类和 EventLogEntry 类的对象

Dim ev as New EventLog("Application", _ 
    System.Environment.MachineName, "MyAppName")
Dim entry as EventLogEntry

循环遍历条目。

For each entry in ev.Entries
   'Loop thru it. entry.EventId, entry.Message, entry.EntryType
Next

如何创建新的 EventLog 节点

如下创建 EventLog 类的对象

Dim ev As New EventLog(NodeNametobecreated, _ 
     System.Environment.MachineName, "Sourceoflog")
ev.WriteEntry("test message")
ev.Close()

System.Diagnostics.Process

Process 类提供跨网络监视系统进程以及启动和停止本地系统进程的功能。

除了检索正在运行的进程列表(通过指定计算机、进程名称或进程 ID)或查看当前访问处理器的进程信息外,您还可以通过 Process 类本身以及通过与 ProcessThreadProcessModule 类进行交互来深入了解进程线程和模块。

ProcessStartInfo 类使您能够指定启动新进程的各种元素,例如输入、输出和错误流、工作目录以及命令行动词和参数。这些为您提供了对进程行为的精细控制。

其他相关类使您可以指定窗口样式、进程和线程优先级,以及与线程和模块的集合进行交互。

一些相关类

  • Process:提供对本地和远程进程的访问,并允许您启动和停止本地系统进程。
  • ProcessModule:表示加载到特定进程中的一个 .dll.exe 文件。
  • ProcessModuleCollection:提供 ProcessModule 对象的一个强类型集合。
  • ProcessStartInfo:指定启动进程时使用的一组值。
  • ProcessThread:表示一个操作系统进程线程。
  • ProcessThreadCollection:提供 ProcessThread 对象的一个强类型集合。

示例

如何列出所有正在运行的进程

Dim oPro as Process

For each oPro in Process.GetProcesses()

     MsgBox(ProcessInfo.ProcessName)

Next

如何启动进程

Dim oPro as Process

pPro = Process.Start("notepad.exe")

pPro.WaitForExit()

如何使用命令行参数启动进程

Dim startInfo As New ProcessStartInfo("explorer.exe")

startInfo.Arguments = "/n"
Process.Start(startInfo)

如何获取有关当前进程的信息

Dim curProc As Process = Process.GetCurrentProcess()

Msgbox(curProc.WorkingSet.ToString() + _ 
 vbCrLf + curProc.StartTime.ToLongTimeString() _ 
 + curProc.TotalProcessorTime.ToString())

如何获取进程加载的模块列表

Dim ProcessInfo As Process =  Process.GetProcessById(ProcessID)
Dim modl As ProcessModuleCollection = ProcessInfo.Modules
Dim strMod As New System.Text.StringBuilder()
Dim proMod As ProcessModule
For Each proMod In modl
     strMod.Append("Module Name: " + proMod.ModuleName + vbCrLf)
Next proMod

System.Diagnostics.PerformanceCounter

PerformanceCounter 类使您能够监视系统性能,而 PerformanceCounterCategory 类提供了创建新自定义计数器和类别的方法。

您可以向本地自定义计数器写入数据,并从本地和远程计数器(系统计数器和自定义计数器)读取数据。您可以使用 PerformanceCounter 类对计数器进行采样,并使用 CounterSample 类从连续的性能计数器样本计算结果。

CounterCreationData 类使您能够在一个类别中创建多个计数器并指定其类型。与 PerformanceCounter 组件关联的其他类提供了对计数器集合、计数器权限和计数器类型的访问。

示例

如何列出所有性能计数器类别

Dim myCategory As PerformanceCounterCategory
Dim myCategories() As PerformanceCounterCategory
myCategories = myCategory.GetCategories()
For Each myCategory In myCategories
   'Loop thru it.
Next

通过此类,我们可以引用现有的性能计数器并读取其值,创建可以写入和读取的自定义性能计数器,并通过代码确定性能计数器是自定义的还是内置的。

有关详细信息,请访问 MSDN

System.Diagnostics.Debug

提供一组有助于调试代码的方法和属性。此类不可继承。我们都习惯于使用此类。以下是此类的重要方法。

  • Assert:重载。检查条件,如果条件为 false,则显示一条消息
  • Write/WriteLine:将调试信息写入 Listeners 集合中的跟踪侦听器
  • WriteIf/ WriteLineIf:如果条件为 true,则将调试信息写入 Listeners 集合中的跟踪侦听器。

System.Diagnostics.Trace

此类提供了一组帮助您跟踪代码执行的方法和属性。您可以使用 Trace 类中的属性和方法来检测发布版本。检测使您能够监视应用程序在实际环境中的运行状况。成员几乎与 Debug 类相似。

System.Diagnostics.StackTrace & System.Diagnostics.StackFrame

这些类将公开例程的堆栈信息。以下示例将返回调用方法的名称。

Dim st As New StackTrace(False)
'just going one level above in the stacktrace
Dim sf As StackFrame = st.GetFrame(1) 
mp_MethodName = sf.GetMethod().Name()
mp_MethodName = sf.GetMethod().DeclaringType().Name() & ":" & mp_MethodName

您可以在 此处找到大量示例。

System.Diagnostics.SymbolStore

System.Diagnostics.SymbolStore 命名空间提供了允许您读取和写入调试符号信息的类,例如源行到 Microsoft 中间语言 (MSIL) 的映射。面向 .NET Framework 的编译器可以将调试符号信息存储到程序员数据库 (PDB) 文件中。调试器和代码分析工具可以在运行时读取调试符号信息。

© . All rights reserved.