问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

visual studioc#怎样调试

发布网友 发布时间:2022-05-06 22:40

我来回答

3个回答

懂视网 时间:2022-05-07 03:01

这是我写的关于VS2010和.Net4发布的博客系列的第26篇。 今天的博文包含了一些有用的能用于VS的调试技巧。 我的朋友 Scott Cate (他写了很多很好的关于VS使用技巧和窍门的 博客 )最近向我强调了这些很好的技巧,大部分使用VS的开发人员好像不知道这些技巧(

这是我写的关于VS2010和.Net4发布的博客系列的第26篇。

今天的博文包含了一些有用的能用于VS的调试技巧。 我的朋友Scott Cate(他写了很多很好的关于VS使用技巧和窍门的博客)最近向我强调了这些很好的技巧,大部分使用VS的开发人员好像不知道这些技巧(即使他们大部分都在产品开发组呆过一阵子)。 如果你还没有使用过这些技巧,希望这篇博文能帮你发现它们。 它们学起来很容易,能帮你节省很多时间。

运行到光标(Ctrl+ F10)

我经常看见人们是这样来调试应用程序的: 他们在应用程序需要调试的代码前设置一个断点,然后反复的敲F10/F11来逐步通过代码,直到到达他们真正想要研究的确切位置。有些时候他们需要仔细观察所跨过的每行代码,这样使用F10/F11 就很合理。 但是更普遍的是,他们只想快点进入他们真正关心的那行代码——这是使用F10/F11 就不是最好的选择了。

相反, 你可能想利用调试器支持的特性“运行到光标”。 只需简单地把你的光标放在代码中你想程序运行到的那一行,然后同时敲Ctrl+F10。这样程序就会运行到光标所在的那一行, 然后执行中止,由调试器控制——这样就节约了你反复敲击F10/F11到达那里的时间。即使你想运行到的那行代码不在当前调试的方法或类里,而是在一个独立的方法或类里,这也同样奏效。

条件断点

我们经常在可用性学习中见到另一个普遍的技巧:开发人员设置断点,运行程序,试着输入一些数据,当到达一个断点时,手工检查某种条件是不是成立,如果成立才决定进一步研究。 如果条件不符合他们想要的, 按F5继续执行程序,尝试另外一些输入,再手工重复同样的过程。

VS的条件断点功能提供了一个更加容易的方法来处理以上情况。 条件断点允许你只在某种明确指定的条件成立时才中止执行,由调试器控制。这帮你免于手动检查/恢复你的程序, 使得整个调试过程免去许多手工活,也不那么冗长乏味。

设置一个条件断点

设置一个条件断点十分简单,在代码里按F9为某一行设置一个断点:

然后右击断点——编辑器左边的红色圆圈,在右键菜单中,选择“条件…” :

将弹出以下对话框, 允许你指明某种条件,只有当这种条件成立时,断点才能达到。 例如:我们可以通过写下面的表达式来指明,只有当paginatedDinners列表元素的个数小于10时,才中止程序,由调试器控制。

现在, 当我重新运行程序来研究一下, 调试器只在这个查找返回值小于10时,才中止程序执行。 如果返回值不小于10 ,将不会触发断点。

命中次数功能

有时你只想在条件第N次成立时中止执行。例如:仅当第5次出现查找返回值小于10时,才中止执行。你这样启用这个功能:右击断点, 选择“命中次数…”菜单命令。

将弹出以下对话框, 允许你指明程序中断的条件:条件被第N次满足时,或者条件被满足的次数是N的倍数时,或者条件被满足的次数大于等于N次时。

机器/线程/进程筛选器

你可以右击断点,选择“筛选器…”菜单命令, 来指明断点只在某台特定的机器,或某个特定的进程或线程中才能被触发。

跟踪点——当击中断点时自定义行为

很多人不知道的一个调试功能是使用跟踪点。 跟踪点是一个断点, 当它被击中时,某种自定义的宏会被触发执行。当你想研究你的应用程序而又不想中止执行程序时, 这个功能特别有用。

我将用一个简单的控制台程序来演示如何使用跟踪点。 下面是斐波那契数列的递归实现:

在上面的应用程序中,针对特定的输入,我们使用Console.WriteLine()来输出最后的斐波那契数列。假如我们想在调试过程中研究斐波那契的递归过程——而不停止调试的执行? 跟踪点能帮我们很轻松地做到这一点。

设置跟踪点

你可以这样启用跟踪点:按F9在代码上设置一个断点, 右击断点,在右键菜单中选择“命中条件…”菜单命令:

将弹出以下对话框——允许你指定当断点触发时,进行何种操作:

如上所示,我们指定每次当断点的条件成立时,打印跟踪信息。注意我们指定了想要输出的局部变量“X” 的值作为输出信息的一部分。 局部变量能通过{变量名}的语法被引用。 也有内嵌的命令(像$CALLER,$CALLSTACK, $FUNCTION等等)可以用来输出跟踪信息中常见的值。

上面对话框的底部, 我们也选中了“继续执行”单选框——表示我们不希望调试器暂停程序。 相反,程序会继续执行——只是我们自定义的跟踪信息会在每次断点条件满足时输出,就这点不同。

现在当我们运行程序时,我们会发现自定义的跟踪信息会自动出现在VS的输出窗口中——使我们能看到程序的递归过程。

你也可以选择为你的程序设置一个自定义跟踪监听器——这样跟踪点的输出信息就会被重定向到它里面,而不是VS的输出窗口里。

跟踪点——运行自定义的宏

上周我在伦敦做了一次演讲, 听众中有个人问了这样一个问题:有没有可能当击中一个跟踪点时,自动输出所有的局部变量。

这个功能不是内置在VS中的, 但是可以通过在VS中写一个自定义的宏来启用它,然后设置一个跟踪点,当它被击中时,调用这个宏。 为了实现这个目的, 打开VS中的宏窗口(工具->宏->宏菜单命令)。然后在项目管理器“MyMacros”结点下面, 选择模板或者新建一个模板(如:添加一个名为“UsefulThings”的 模板), 再将下面的VB宏代码贴到模板里,并保存它:

 1: Sub DumpLocals()
 2: 
 3: Dim outputWindow As EnvDTE.OutputWindow
 4: 
 5: outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object
 6: 
 7: Dim currentStackFrame As EnvDTE.StackFrame
 8: 
 9: currentStackFrame = DTE.Debugger.CurrentStackFrame
 10: 
 11: outputWindow.ActivePane.OutputString("*Dumping Local Variables*" + vbCrLf)
 12: 
 13: For Each exp As EnvDTE.Expression In currentStackFrame.Locals
 14: 
 15:  outputWindow.ActivePane.OutputString(exp.Name + " = " + exp.Value.ToString() + vbCrLf)
 16: 
 17: Next
 18: 
 19: End Sub

上面的宏代码依次检测当前堆栈,获取所有的局部变量,并将其显示在输出窗口。

使用DumpLocals自定义宏

在下面这个简单的应用程序中,我们可以利用自定义的“DumpLocals”宏:

在上面的Add方法的return语句上,按F9设置一个断点。 右击断点,选择“命中条件…”菜单命令:

将弹出以下对话框,上例中,我们选中了“打印信息”的单选框,再手工指定希望输出的变量, 而这里, 我们选中“运行宏”的单选框,使它指向我们创建的自定义宏UsefulThings.DumpLocals:

我们仍然选中“继续执行”单选框,这样能保证当跟踪点被击中时,程序依然能够继续执行。

运行程序

现在当我们按F5运行程序,当调用Add方法时,我们将看见以下输出出现在VS输出窗口中。 注意当跟踪点被击中时,宏是如何自动列出各个变量名及其值的。

总结

VS调试器功能非常丰富。 我强烈建议大家抽出一些时间来学习它的所有功能。 以上的技巧和诀窍只是很多大家没有真正意识到的功能中的一小部分。

我之前写过其他一些关于VS2010调试器改进的博客

也请务必看看Scott Cate很棒的VS2010技巧和诀窍系列,你可以学习如何更好的利用VS。他有一些非常棒的免费视频和博客。

也要看看Jim Griesmer很棒的VS调试技巧和诀窍系列。 他有许多很好的可以利用的技巧和诀窍。

希望这能对您有所帮助。

Scott



原文:http://weblogs.asp.net/scottgu/archive/2010/08/18/debugging-tips-with-visual-studio-2010.aspx

中文翻译:http://blogs.msdn.com/b/scottgu/archive/2011/10/08/visual-studio.aspx?wa=wsignin1.0

热心网友 时间:2022-05-07 00:09

1:命令窗口

CTRL + D + I,可以在立即窗口中写一些临时的代码;

2:编辑并继续

选中下面的选项,可以让你在调试暂停中,修改代码,而不用重新启动
3:执行

单步执行:F10

跳进方法:F11

跳出方法:SHIFT + F11

执行到光标处:CTRL + F10

4:修改运行中的某值直接修改法,
立即窗口法,,然后在立即窗口写代码吧

5:回退当前执行代码

比如,代码运行到了 49 行了,想回到 45 行,没关系,鼠标点中*箭头,从 49 行拖到 45 行就可以了

6:查看当前调用链

CTRL + D + C,打开 Call Stack 窗口,这在调试的时候非常有帮助;

7:从进程开始调试

有时候,不想启动 VS 直接进行调试,比如,网站部署在本机,想从运行中的状态开始调试当前浏览器页面,即可以用 Attack to Process 启动调试

8:When Hit

我记得在我第一次写 Socket 程序的时候,调试耗费了无数的生命值,如果当时就知道使用 When Hit 这个功能就会好很多,即,如果断点命中,要打印出什么,这个在调试异步或者多线程代码的时候特别有用

其中,变量名或者代码,要写在{}中。

热心网友 时间:2022-05-07 01:27

你这个只是一个cs文件,即C#的一个类文件,没法运行。调试是针对项目的,对一个项目进行调试才行。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
信和财富p2p回款怎样?想做理财,有做过的吗?谢谢 想当飞行员高中学文理哪个好 用迅雷下载的电影中带有srt格式idx格式和sub格式的字幕怎么导入... 酸汤乌鱼的做法 四川的酸汤乌鱼的做法 酸汤乌鱼片的做法 用烤箱弄蛋白糖的做法 入口即化蛋白糖怎么做好吃 ...3000元的手机,我比较喜欢触屏机,有什么牌子介绍,最好是功能强大的... 蓝魔T11TE能播放超过4G的视频文件吗?(比如720P和1080P) 政府的转移支付是什么 华为mate20X如何电池? 笔记本不支持miracast怎么用 assetbundle怎么路径 新手机号怎么注册不了怎么办? 为什么我怎么不会写作文 我们为什么不会写作文? 为什么我从小到大都不会写作文呢? 为什么总是不会写作文? 注册不了怎么办? 为什么孩子读了很多书还是不会写作文 为什么不会写作文? 为什么有人不会写作文,大多数是因为什么 用ipad1下载安装了微信6.0版后打不开,又回不去老版本怎么办? 微信升级到6.0最新版只要登陆就跳出有新版本要更新的提示,老火! 登录微信时,提示“你的版本过低,升级后再登录”,无法登录……如何解决? 求移动和联通手机号码的所有号段; 移动、联通、电信现在所有的号段都有哪些 补办身份证需要多久能拿到 补办身份证几天可以拿到 华为荣耀4c电信版4g手机运行内存到底有多大?真的能到达2g吗? 华为荣耀4cSD卡中的“其它”占的内存怎么清理 鸿雁LED灯具采用啥品牌芯片 鸿雁灯具100瓦个led工矿灯什么价位 华为荣耀4c怎么把软件安装到外置sd卡!手机内存快没了! 鸿雁灯具100瓦个led工矿灯什么价位 20吨空气能热水器开洗浴够用吗 visual studio怎么调试程序 华为荣耀4c怎么把手机内存转到sd卡上 我家厨房和卫生间吊顶需要4000K的集成吊顶灯,鸿雁有吗是集成吊顶,鸿雁有可以安装照明LED灯具吗 摩托车交强险查询系统 led筒灯价格大全 巫山云雨高清完整版电影 封神演义中太极图为什么化作金桥,金桥算什么? 摩托车交强险查询系统 鸿雁的灯具好吗?性价比如何啊 华为荣耀4c为什么内存卡不能用 现在用鸿雁38W的传统灯管,想替换LED灯管的,要怎么弄? 美甲店取名 求彭丹电影巫山云雨