[VS2005 调试]
►调试窗口所出现的value列代表变量.toString(),因此,如果显示的是无用信息,请考虑在对应变量类中实现tostring()方法 public string ToString() {......}
[DebuggerDisplay("{字段名} {字段}")] 某种意义上相当于ToString()
►修改mcee_cs.dat文件(仅针对c#而言),在调试包安装目录下可以找到 我没找到,我的vs里有调试啊,应该是装了调试部分的,怎么没找到呢
►通过给类写调试proxy类,调试过程显示的信息均为proxy的字段
调试时为一个类构建proxy,举例如下:
代码自定义调试时命名空间 System.Diagnostics
class EmployeeProxy
{
public int ID;
public string Name;
public string DepartmentName;
public EmployeeProxy(Employee employee)
{
ID = employee.ID;
Name = employee.FirstName + " " + employee.LastName;
DepartmentName = employee.Department.Name;
}
}
[DebuggerTypeProxy(typeof(EmployeeProxy))]
class Employee{
}
►[设置调试属性]
在不想显示的方法名前加[DebuggerBrowseable(DebuggerBrowseable.Never)]
System.Diagnostics属性:
-DebuggerBrowseable 隐藏成员
-DebuggerDisplay 改变数据变量的显示值
-DebuggerTypeProxy 不同类型视图
-DebuggerVisualizer 自定义视图
►[自定义调试视图]
在watch窗口中,有些类型的如图片,微软没有给出调试显示视图,所以需要自己编写代码显示XX类型的变量信息。如何显示图片大家都知道,但是如何把这个自定义的视图与图片调试挂在一起呢?很简单,其实就是给DialogDebuggerVisualizer类写扩展内容,并把含这个功能的dll复制到C:/Documents and Settings/Bluewater/My Documents/Visual Studio 2005/Visualizers目录下就行了 如下:
显示图片功能
namespace ImageVisualizer
{
public partial class ImageForm : Form
{
public ImageForm(Image image)
{
InitializeComponent();
this.pictureBox1.Image = image;
}
}
}
与调试image变量绑定
using System.Diagnostics;
[assembly: DebuggerVisualizer(typeof(ImageVisualizer.DebuggerSide), Target = typeof(Image), Description = "Image Visualizer")] //可视化调试image类型时,调用ImageVisualizer.DebuggerSide.Show(..)
namespace ImageVisualizer
{
public class DebuggerSide : Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer
{
protected override void Show(Microsoft.VisualStudio.DebuggerVisualizers.IDialogVisualizerService windowService, Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider objectProvider)
{
if (windowService != null)//这个应该就是当前调试的服务,也有可能他另new一个啊
{
Image image = (Image)objectProvider.GetObject();//在watch中你点哪个变量就是哪个罗
ImageForm imageForm = new ImageForm(image);
imageForm.ShowDialog();
}
}
}
}
►[多线程调试] 断点属性中
过滤线程调试:设置断点,点击断点标记,属性,过滤
执行到断点时,输出一些有用信息,或..
[即时窗口应用]
修改变量值,但不用重新编译
输入变量名
输出变量值
变量 赋值 语句
[两个概念]
字段:又叫域
属性:实现get 或 set
[线程相关概念]
挂起 sleep :暂停