跟我学VS#语言编程技术在C#中调试 Windows 窗体的应用技术及应用示例.docx
《跟我学VS#语言编程技术在C#中调试 Windows 窗体的应用技术及应用示例.docx》由会员分享,可在线阅读,更多相关《跟我学VS#语言编程技术在C#中调试 Windows 窗体的应用技术及应用示例.docx(15页珍藏版)》请在冰豆网上搜索。
跟我学VS#语言编程技术在C#中调试Windows窗体的应用技术及应用示例
跟我学VS#语言编程技术——在C#中调试Windows窗体的应用技术及应用示例
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
1.1跟我学VS#语言编程技术——在C#中调试Windows窗体的应用技术及应用示例
1.1.1在C#中调试Windows窗体的应用技术及应用示例
1、创建或着打开待调试的Windows窗体C#项目
Windows窗体是最常见的VisualC#应用程序之一。
Windows窗体用来创建标准的Windows应用程序。
为了能够正确地掌握在VS.Net中调试Windows应用程序,首先必须关闭所有打开的解决方案,并创建或着打开待调试的Windows窗体C#项目。
1)创建待调试的Windows窗体C#项目(
从“文件”菜单中,选择“新建”并单击“项目”,即会出现“新建项目”对话框。
在“项目类型”窗格中,选择“VisualC#项目”;在“模板”窗格中,选择“Windows应用
名称”框中,为该项目提供一个唯一的名称(例如:
SimpleDebug);单击“确程序”;在“
定”。
(2)在Windows窗体中加入控件
此时,VS.Net将创建一个新项目,并在Windows窗体设计器中显示一个新窗体。
从“视
1杨教授工作室,版权所有,XX,1/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
图”菜单中选择“工具箱”。
在工具箱中,单击“按钮”(Button)控件并将该控件拖到窗体设计图面上,将该按钮放在窗体上。
在工具箱中,在“文本框”(TextBox)控件上单击并将该控件拖到窗体设计图面上,将该文本框放在窗体上。
(3)编程按钮的button1_Click函数
在窗体设计图面上,双击按钮。
这将转到代码页,光标将位于button1_Click函数中。
在button1_Click函数中,添加下面的C#代码:
privatevoidbutton1_Click(objectsender,System.EventArgse){
textBox1.Text="Buttonwasclicked!
";
}
(4)生成窗体的解决方案
从“生成”菜单中,选择“生成解决方案”;该项目应顺利生成,没有错误。
但应该设置为debug版,即请将可执行文件编译为包含符号文件(.PDB)的调试版本。
到此时将为调试准备好应用程序。
下面可以开始调试了。
2、调试所创建的Windows窗体
(1)设置为Debug方式
在解决方案配置窗口中右击解决方案名,然后在弹出菜单中选择“配置管理器”菜单项目。
2杨教授工作室,版权所有,XX,2/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
在对话框内将“活动的解决方案配置”选择为Debug方式,以为窗体产生调试信息。
(2)设置断点
1)方式一
在特定的行设置断点以暂停代码的执行。
在源窗口中,右键单击程序中的需要设置断点的某一行,并在弹出菜单中选择“插入断点”:
2)方式二
3杨教授工作室,版权所有,XX,3/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
使用断点属性对话框来设置条件(可以选择调试菜单---新断点,弹出该对话框)
最后,在代码中将出现一个红点并且该行上的文本突出显示为红色。
红点表示一个断点(当在调试器下运行该应用程序时,此调试器将在命中该代码时在该位置中断执行。
然后您可以查看应用程序的状态并调试它)。
(3)启动调试过程
从“调试”菜单中选择“启动”;Windows窗体开始运行;在此Windows窗体上,单击您添加的按钮。
在VisualStudio中,此操作将转到代码页上设置了断点的行。
该行将用黄色突出显示。
现在您可以查看应用程序中的变量并控制其执行。
应用程序现已停止执行,并等待您的操作。
4杨教授工作室,版权所有,XX,4/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
注意:
如果“活动的解决方案配置”设置为“Release”,则执行将不会在断点处停止。
这是在模拟实际发布程序的行为。
标记断点的圆圈将包含一个白色问号。
如有必要,请使用“配置管理器”对话框更改此设置。
3、常用调试窗口介绍
(1)调用堆栈窗口
1)打开
从“调试”菜单中选择“窗口”,然后选择“调用堆栈”。
2)作用
“调用堆栈”窗口使您可以查看调用堆栈上的函数名、参数类型和参数值。
仅当正在调试的程序处于中断状态时,才显示调用堆栈信息。
3)“名称”列
显示调用堆栈上每个函数的名称。
为了区分对同一函数的不同调用,每个名称都带有下列可选信息:
模块名(不可用于SQL调试)、参数名、参数类型参数值、行号、字节偏移量(不可用于SQL调试)
4)“语言”列
显示编写函数的语言。
如果不能从调试信息中确定语言,则该列为空。
(2)“局部变量”窗口
1)打开
5杨教授工作室,版权所有,XX,5/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
从“调试”菜单中选择“窗口”,然后选择“局部变量”(必须在进行调试时才能打开“局部变量”窗口)。
2)“局部变量”窗口包含三列信息:
名称:
该列包含当前范围内所有局部变量的名称。
结构和数组变量有一个树控件(TreeControl),可用来显示或隐藏元素。
值:
该列显示每个变量所包含的值。
默认情况下,整数变量以十进制格式表示。
可以在“选项”对话框->“调试”->“常规”中将表示形式更改为十六进制,也可以通过右击“局部变量”窗口并从快捷菜单中选择“十六进制显示”选项来进行此操作。
类型:
该列标识“名称”列中列出的每个变量的数据类型。
(3)“自动窗口”窗口
1)打开
从“调试”菜单中选择“窗口”,然后选择“自动窗口”。
2)作用
当调试本地应用程序和逐过程进行函数调用(F10)时,“自动窗口”窗口将显示这个函数以及可能由这个函数调用的所有函数的返回值。
3)“自动窗口”窗口包含以下信息
6杨教授工作室,版权所有,XX,6/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
名称:
当前语句和上一语句中的所有变量名。
当前语句是在当前执行位置处的语句,是
继续执行语句时要执行的下一条语句。
结构和数组变量有一个树控件(TreeControl),
可用于显示或隐藏元素。
值:
每个变量包含的值。
默认情况下,整数变量以十进制格式表示。
可以在“选项”对
话框->“调试”->“常规”中将表示形式更改为十六进制,也可以通过右击“自动窗
口”窗口并从快捷菜单中选择“十六进制显示”选项来进行此操作。
类型:
“名称”列中列出的每一变量的数据类型。
(4)“监视”窗口
1)打开
从“调试”菜单,选择“窗口”,然后选择“监视”,并单击“Watch1”、“Watch2”、“Watch3”或“Watch4”。
2)作用
可以使用“监视”窗口计算变量和表达式并保留结果。
还可以使用“监视”窗口编辑变量或寄存器的值。
)名称3
在该列中,可以键入调试器识别的任何有效表达式。
4)值
调试器计算出在“名称”列中显示的表达式,并将结果放入该列中。
如果表达式是变量或寄存器名称,可在该列中编辑此值以改变变量或寄存器的内容。
不能编辑const变量的值,只能编辑和显示本机代码应用程序的寄存器值。
可以在“选项”对话框->“调试”->“常规”中将值的数字格式更改为十六进制,也可以通过右击“监视”窗口并从快捷菜单中选择“十六进制显示”选项来进行此操作。
5)类型
该列显示变量或表达式的数据类型。
(5)命令窗口
1)打开
从“调试”菜单,选择“窗口”,然后选择“即时”。
7杨教授工作室,版权所有,XX,7/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
2)作用
“命令”窗口用于在集成开发环境(IDE)中发出命令或调试和计算表达式。
它有两种不同的模式:
“命令”和“即时”。
命令模式:
用于在VisualStudio.NET环境中直接执行VisualStudio命令而绕过菜单系
统,或用于执行不在任何菜单中的命令(如>Edit.Find可以打开查找对话框)。
即时模式:
用于调试用途、计算表达式、执行语句、打印变量或对象的值等。
在进行调
试应用程序、执行函数和语句等操作时,可使用“即时”模式查看并更改变量的值。
4、添加对数据的监视
窗口”,再选择“监视”,然后单击“Watch1(监视1)”。
在从“调试”菜单,选择“
“Watch1”窗口中,单击一个空行。
在“名称”列中键入textBox1.Text,然后按Enter键。
“Watch1”窗口显示变量textBox1.Text的值:
textBox1
5、执行单步跟踪程序语句
从“调试”菜单,选择“逐语句”。
“Watch1”窗口中TextBox1.Text的值将被更改为“Buttonwasclicked!
”。
8杨教授工作室,版权所有,XX,8/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
6、继续执行程序
从“调试”菜单中选择“继续”以继续调试程序;并在再次启动的Windows窗体上,单击按钮;VisualStudio再次中断执行。
7、取消断点
单击表示断点的红点。
这将从代码中移除该断点。
8、点击查看演示过程或者下载程序代码
1.1.2附加到Windows窗体以进行调试
程序员可以将调试器连接到已经运行的程序并对该程序进行调试。
无论程序是在主机上运行还是在远程计算机上运行,连接到运行程序后的效果都相同。
从而使所要调试的程序无须在VisualStudio.NET集成开发环境(IDE)中启动(VisualStudio.NET也能调试在VisualStudio之外启动的进程。
为此,必须启动VisualStudio并附加到正在运行的进程上)。
1、在上面创建的项目中,再次在添加的代码行上设置断点
2、从“调试”菜单中,选择“开始执行(不调试)”
此Windows窗体开始在Windows下运行,就像双击了它的可执行文件一样。
未附加调试器。
9杨教授工作室,版权所有,XX,9/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
3、从“调试”菜单中,选择“进程”(也可以从“工具”菜单使用“调试进程”)
4、在“可用进程”窗格中,在“进程”列中找到进程名(SimpleDebug.exe)并单击它。
10杨教授工作室,版权所有,XX,10/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
5、单击“附加”按钮
在“附加到进程”对话框中,选择“选择要调试的项目类型”下的“公共语言运行库”,然后单击“确定”。
您已将调试器附加到正在运行的Windows窗体上。
注意,进程已经添加到“进程”对话框的“已调试的进程”窗格中。
11杨教授工作室,版权所有,XX,11/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
6、单击“关闭”
在Windows窗体中,单击唯一的按钮。
调试器将在断点处中断Windows窗体的执行。
1.1.3在VS.Net中新增的调试功能
VisualStudio.NET对所有VisualStudio语言(包括VisualBasic和C#)提供了单一的集成调试器。
一个新的、统一的接口合并了VisualC++和VisualBasic调试器的功能,并增加了很多新功能。
1、跨语言混合模式调试
使用集成调试器,程序员可以调试在同一解决方案中以不同语言编写的项目。
例如,您可以调试这样一个解决方案,它包含一个由VisualBasic或VisualC#用户界面应用程序和VisualC++服务器应用程序组成的项目,您也可以在这些项目之间来回执行单步调试,
12杨教授工作室,版权所有,XX,12/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
例如从C++的托管扩展到VisualBasic,然后又回到C++托管扩展。
2、连接到运行的程序
程序员可以将调试器连接到已经运行的程序并对该程序进行调试。
无论程序是在主机上运行还是在远程计算机上运行,连接到运行程序后的效果都相同。
程序无须在VisualStudio.NET集成开发环境(IDE)中启动。
3、远程调试
程序员可以从正在运行VisualStudio的计算机连接到在另一台计算机上运行的进程,并对其进行调试。
例如,如果您正在调试Windows窗体客户端应用程序及其使用的XMLWebservices,则可以在客户端运行VisualStudio,然后连接到提供XMLWebservices的服务器。
您通常会为Web窗体项目或ASP.NETWeb服务项目执行这种调试。
4、调试多线程应用程序
为VisualBasic用户提供的一项新增功能是编写和调试多线程应用程序。
“线程”窗
口可用于查看正在运行的线程和切换上下文。
5、调试多个程序
通过连接到运行的程序或从VisualStudioIDE中启动多个程序,可以对多个程序进行调试。
6、调试ASP.NETWeb应用程序
ASP.NETWeb应用程序的调试配置已经得到大大的改进。
大多数情况下,只需从“调试”菜单中选择“启动”,调试器就将自动连接到ASP.NET辅助进程对Web窗体进行调试(即使ASP.NET辅助进程在不同的服务器上运行)。
由于新增了调试器用户组,安全性配置已变得更为容易。
有关详细信息,请参阅调试脚本和Web应用程序。
7、.NET框架的调试类和代码跟踪类
程序员可以在Microsoft.NET应用程序中包括检测代码。
有几个.NET框架类可用于对代码进行调试和检测。
1.1.4调试多个程序
利用VisualStudio调试器,可以调试运行在多个进程中的程序。
可以将一个进程看成是运行在自身内存空间中并具有自身目标代码、数据和资源的程序实例。
比如:
当通过启
13杨教授工作室,版权所有,XX,13/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
动.EXE文件启动一个程序时,系统调度器就为该程序创建一个新的进程。
如果启动多个程序实例,就会创建多个进程。
操作系统出于自身目的,自动创建其他的进程。
1、脚本应用程序
某些程序,如脚本应用程序,没有自己的进程。
这些程序驻留在其他应用程序(如InternetExplorer或InternetInformationServices)之中,并在宿主进程中运行。
要调试此类程序,必须调试宿主进程。
通常先要附加到宿主进程。
2、调试多个进程的技巧
在VisualStudio.NET中,可以在一个VisualStudio解决方案中调试多个进程。
这时,每一个进程都是由解决方案中的一个独立项目创建的,因此可以看作是调试多个项目。
可以设置多个启动项目来调试多个进程,或者可以先开始调试一个项目,再从“解决方案资源管理器”启动其他项目。
VisualStudio.NET也能调试在VisualStudio之外启动的进程。
为此,必须启动VisualStudio并附加到正在运行的进程上。
可以同时调试在VisualStudio之内和之外启动的进程。
只需在VisualStudio中通过运行一个项目启动一个进程,再附加到一个外部进程。
甚至可以调试这样的多个进程:
进程正在运行以不同语言编写的代码。
例如:
可以同时调试一个包含C++代码的进程和另一个包含VisualBasic代码的进程或者一个既有VisualBasic代码又有C++代码的进程,或是VisualBasic和C#混合代码的进程。
只要VisualStudio调试器支持该语言,混合语言的调试通常是透明的。
3、启动其他的项目
当一个项目正在运行时启动另一个,要求这两个项目必须是在同一个解决方案中。
可以利用“解决方案资源管理器”启动一个或多个其他的项目:
(1)在“解决方案资源管理器”中启动项目
在“解决方案资源管理器”中,选择要开始调试的项目;右击项目名称或图标;在快捷
菜单中选择“调试”并单击“启动新实例”。
14杨教授工作室,版权所有,XX,14/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料
当在一个解决方案中调试两个以上项目时,可以以下面两种方式之一在其间切换:
(2)调试过程中在项目之间切换
在“调试位置”工具栏上,从“程序”列表框中选择要切换到的程序;切换到一个项目将使其成为用于调试目的的当前进程。
从“调试”菜单选择的任何命令(如:
“中断”或“继续”),既影响当前进程也会影响其他正在调试器控制之下运行的进程。
15杨教授工作室,版权所有,XX,15/16页
杨教授工作室精心创作的优秀程序员职业提升必读系列资料(3)仅停止当前进程
从“工具”菜单中选择“选项”;在“选项”对话框中,打开“调试”文件夹,然后选择“常规”类别;选择“在中断模式下,只停止执行当前的进程”。
16杨教授工作室,版权所有,XX,16/16页