精华内容
下载资源
问答
  • VS断点调试

    2020-08-18 21:39:19
    VS断点调试1 一般断点2 条件断点3函数断点4 数据断点4.1 根据内存地址设置数据断点5 操作断点:在输出框可以看到 1 一般断点 查看流程步骤,在语句左边打断点 2 条件断点 如for循环,在这里打断点,设置条件,当变量...

    debug & release

    debug调试,你在程序中设置了断点,为什么vs.net知道在那里要停下来,当你把鼠标移到某个变量上,vs.net就会显示它当时的值?
    因为编译器在代码中添加了许多调试需要的代码,可以让vs.net得到,返回给你。
    这些代码当然是要占用空间和时间的,在你的程序调试完了后,可以正确运行了。完全可以去掉这些代码,这时候就应该用Release模式了。

    不管Debug还是Release模式,都要编译,都有中间临时代码产生,所以obj目录下有debug release目录。两种模式编译的结果,就放在bin目录下。
    编译完后,中间临时代码是没什么用的了,所以一般不管obj目录里的东西!

    在用VC编译是,有debug和release两种

    有什么区别呢
    一个为调试版本,其中包括了出错时能够定位源代码的在行,如果源文件已经改变,定位出来会有偏移,而且,在这个版本中编译器不会进行代码优化,并且在程序中能用宏定义_DEBUG来确定当前的版本。另一个为正试版本,程序出错只是进行简单的错误处理,编译器会优化代码,以提高性能。
    Release代码更小,执行更快,编译更严格,更慢
    当然就没有了调试信息

    1 一般断点

    查看流程步骤,在语句左边打断点

    2 条件断点

    如for循环,在这里打断点,设置条件,当变量i == 6或者变量 a==6均可
    在这里插入图片描述

    3 函数断点

    输入函数名称,在执行进入该函数时断点
    在这里插入图片描述

    4 数据断点

    断点作用:用于检测任意变量,包括类中或者结构体中某个成员变量的值发生了变化,如果此时设置了数据断点,只要该变量的值发生了变化就会触发数据断点,导致程序中断。用于Debug时,查找莫名其妙改变值的变量,用于锁定隐藏bug,以及通过堆栈信息梳理逻辑漏洞。

    根据内存地址 或者 &变量 设置数据断点

    在这里插入图片描述
    输入&地址,得到地址
    在这里插入图片描述
    在这里插入图片描述

    输入要监视的变量地址,或者输入&变量也可在这里插入图片描述
    在这里插入图片描述

    5 操作断点:在输出框可以看到

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • vs 断点调试

    千次阅读 2015-02-09 17:50:11
    VS断点调试 2013-02-28 16:15 236人阅读 评论(0) 收藏 举报 引自http://blog.csdn.net/yizhu2000/archive/2007/08/03/1725008.aspx 下面有从浅入深的6个问题,您可以尝试回答一下 一个如下的语句for (int i ...
     

    VS断点调试

     236人阅读 评论(0) 收藏 举报

    引自http://blog.csdn.net/yizhu2000/archive/2007/08/03/1725008.aspx

    下面有从浅入深的6个问题,您可以尝试回答一下

    1. 一个如下的语句for (int i = 0; i < 10; i++){if (i == 5)j = 5;},什么都写在一行,你怎么在j=5前面插入断点
    2. 在一个1000次的循环体内部设置断点,你希望当循环进行到900次后中断,怎么才能做到呢?
    3. 你有一个表达式在上面循环的某一次发生了变化,你想知道是哪一次,在哪个地方,怎么才能做到?
    4. 你希望你的断点在被命中100次后,每命中三次中断一次,比如第103,第106,第109怎样做?
    5. 你有在调试一个服务程序,希望在其内部打上了断点,可是,由于这是一个公用的服务你不希望其他访问这个服务的程序被你的调试所干扰,你想怎么办?
    6. 怎样知道2个断点中断的时间间隔

    问题1,2

    这两个问题最简单,我在一个例子里说明

    例如如下循环

    for(int i=0;i<1000;i++){doSomeThing......}

    在循环的大括号上单击右键,插入断点,用这个方法,可以对付那些喜欢把语句写在一行上的家伙,其实,随着.Net3.5中Linq的出现,我们肯定也会经常在在一行上写复杂的表达式,这个时候用这种插入方法会比较管用

    ok,现在我们来编辑这个断点的条件,在断点上右键单击,选择如图菜单项

    vs2005调试技巧 - 秋溟笑笑生 - 秋溟笑笑生个人主页

    在弹出的窗口中可以设置断点命中的条件i==900

    vs2005调试技巧 - 秋溟笑笑生 - 秋溟笑笑生个人主页

    注意我是在调试C#代码,默认的条件语句语法是C#,如果你想切换,那就需要用Ctrl-B,来插入断点,并在弹出窗口中选择语言

    vs2005调试技巧 - 秋溟笑笑生 - 秋溟笑笑生个人主页

    通过这样设置条件断点,我们就可以解决我们的问题1,2了

     

    问题3

    同样通过设置条件断点我们还可以解决我们的问题3,对表达式变化的跟踪

    string user="yizhu2000"

    for(int i=0;i<10000;i++){

    DoSomething1()

    .......

    DoSomethingN()

    }

    当循环执行完毕时我们发现user变成了"smart_boy",你不知道这个值是在第几次循环的时候变化的,那么你是不是会选择打上断点,一次一次中断,来查看呢?当然不用

    在循环体结束的位置我们设置一个断点,打开条件编辑窗口(打开方法同上),设置表达式为user,勾选下面的HasChanged,也就是说,你告诉断点,当user的值发生变化时才触发

     

    (注意:第一次执行到断点的时候,程序一定会中断,并计算这时表达式的值,所以,所谓发生变化,指的是以后执行到断点是表达式的值和第一次执行到断点时表达式的值的比较)

    问题4

    如何让断点在指定的命中次数或者大于某个次数时触发呢?方法是设定几个断点的HitCount,右键单击断点,在弹出菜单中选择Hit Count,会弹出如下窗口

    vs2005调试技巧 - 秋溟笑笑生 - 秋溟笑笑生个人主页

    在"when the break point is hit"下拉列表里,我们可以看到四个选项

    break always:总是中断

    break when the hit count is equal to:等于某次数时中断

    beak when the hit count is a multpile of:当次数是某数的倍数时中断

    break when the hit count is greater than or equal to:当大于等于某数时中断

    问题5

    前面4个问题都已经解决了,第5个问题的解决方法是利用断点的Filter功能,比如我希望断点只有被机器名为yizhu的机器访问才能触发,我可以这样设置

    vs2005调试技巧 - 秋溟笑笑生 - 秋溟笑笑生个人主页

    当其他机器访问程序的时候,断点将不会触发,这样做的优点是通过设置机器名,我们可以让其他机器访问的时候感觉不到断点的存在,除此之外我们可以设置机器名,进程号,进程名,线程号,线程名作为filter,而且还可以把他们组合起来,比如我希望通过当机器yizhu的dllhost进程调用时才触发,那么问题就可以设置为MachineName="yizhu"&ProcessName="dllhost"

    问题6

    现在我们来解决第6个问题:

    在程序性能调试的时候,我们经常需要知道某段代码的执行效率,一般来说,我们可以在程序中加入时间点,通过时间点相减来取得时间间隔,这种方法有个显而易见的缺点就是需要修改程序,想要不修改程序,就需要借助一些工具,那么有没有什么方法可以声明式的插入时间点,并计算值呢?其实断点完全可以做到

    在给出方法前,我们来看看断点的另外一个设置项,When Hit,这个选项可以让我们在命中断点后做一些事情,包括输出一些内容,或者调用宏,比如输出一个程序中变量的值

    vs2005调试技巧 - 秋溟笑笑生 - 秋溟笑笑生个人主页

    我们输出了变量user的值,下面Continue Execution表示程序不会中断,输出后继续执行,注意表达式需要用{}括起来,,其他的部分会被作为字符串输出。设定WhenHit后断点变成了方形(看厌了圆断点,我还挺喜欢这个方家伙的)

    在output中查看输出结果,如下:

    vs2005调试技巧 - 秋溟笑笑生 - 秋溟笑笑生个人主页

    既然可以计算表达式,我们的第一个最简方案就出来了,也就是在程序执行到断点的时候,输出DateTime.Now,这样当然是可行的,但是我们需要的是时间间隔,所以我们还需要自己来算个减法,还是挺麻烦的,怎么样才能让程序自己输出时间间隔呢?有一个想法是这样的,我们在上一个断点声明一个时间变量,然后在下面的断点里用DataTime.Now减去这个变量,即

    断点一的条件:{DateTime _t=DateTime.Now;}

    断点二的条件:{DateTime.Now-t;}

    看起来不错,但是实际运行时就有问题了,让我们看看输出吧

    vs2005调试技巧 - 秋溟笑笑生 - 秋溟笑笑生个人主页

    上面高亮的部分说,变量申明只能在immediate window中进行,所以断点一的变量没有申明成功,关于immediatewindow,我们以后会涉猎到,反正就是说想在表达式里申明变量,没门,死路一条.那么我们怎么才能不申明变量又时间点呢?

    这时我想起了Thread.SetData 方法,这个方法可以往当前线程专门提供的空间中插入一些数据,并且可以通过GetData得到数据,具体细节参考

    http://msdn2.microsoft.com/zh-cn/library/system.threading.thread.setdata(VS.80).aspx

    于是方案就有了,在第一个断点处把时间放入Thread的DataSlot,然后第二个断点取出来相减

    断点一的条件:{Thread.SetData(Thread.GetNamedDataSlot("ExecutionTime"),DateTime.Now);}

    断点二的条件:{DateTime.Now-(DateTime)System.Threading.Thread.GetData(System.Threading.Thread.GetNamedDataSlot("ExecutionTime"));}

    看看输出效果

    vs2005调试技巧 - 秋溟笑笑生 - 秋溟笑笑生个人主页

    我们的目的已经达到了,output中成功的输出了时间间隔,当然,还不是很完善,首先,这个方法限于两个断点,你想多打几个断点,测试两两间的间隔还是比较麻烦.测量精度也可以提高,大家有兴趣可以自己研究这个方法的扩展

     

     

    转载地址http://www.cnblogs.com/hsapphire/archive/2010/01/06/1640195.html

    如果没有调试功能,VS只能算是一个允许你编译程序,功能丰富的编辑器。拥有了调试功能,VS才变为一个不可多得的开发工具。其实评判一个IDE的好坏主要还是要看它的调试功能如何。

    VS提供了丰富的调试经验。你可以设置断点,逐行执行,当程序执行时可以设置和读取变量值。这里主要展示如何充分利用VS的调试功能,将会学会如何设置断点、检查断点、当异常抛出时暂停执行,以及如何调试类似JavaScript、VBScript等脚本语言以及运行在SQLServer实例上的T-SQL等。

    # Hack 36. 设置断点

    VS提供了一个强有力的调试器,最常用的功能就是设置断点,当到达断点时,程序挂起,进入中断模式;在此模式下开发人员可以检查或者改变程序的变量。在VS2005中,甚至可以改变程序代码。VS能够设置智能断点,比如当某种特定条件满足或者经过一个断点一定次数后挂起程序。

    (1) 到达特定行时进入中断模式

    其实就是常用的设置断点方式,在此行最左边的空白处点击一下,出现个红色小圆,它的名字就叫断点;如果去除断点,就再点一下,呵呵,其实用快捷键F9可以来回切换的。删除所有断点是用Ctrl+Shift+F9。

    此书说可以通过新建断点对话框来创建断点,快捷方式是Ctrl+B,但是偶却只调出来了一个添加函数断点的对话框,和书中讲的不一样,可能VS2005有所改变了吧。

    书中说此对话框有四个页面:

    函数:用来给一个函数的特定行添加断点; 
    文件:用来给解决方案中某个文件的特定行添加断点; 
    地址:给特定内存地址设定断点。通常用于调试非托管代码; 
    数据:用来给一个变量添加断点。当变量改变时,断点会触发。数据断点仅能用于调试非托管代码时使用。

    可能是VS2005的确对其进行了修改,提供了函数断点设置,另外还有一个新建数据断点,但是一直处于不可用状态,可能是比较智能,能够区别当前是否是非托管代码。偶本人也觉得对于文件断点没有什么必要,其实都差不多。

    (2) 当一个函数被调用时进入中断模式

    在VS2005中就是通过Ctrl+B调出在函数设置断点对话框,指定函数名即可,格式如下:命名空间.类名.方法名。如果仅仅指定了方法名或者类名和方法名,则VS会智能列出供您选择。

    也可以利用调用堆栈窗口来配置调试器在特殊函数处中断,当处于调试模式下,选择调试->窗口->调用堆栈菜单,则此窗口会列出所有在调用堆栈上的函数。在函数名上右击并选择插入断点选项即可。通过它来设置断点在调试递归函数时很方便。

    (3) 查看断点

    查看断点窗口通过快捷键Ctrl+Alt+B可以调出,可以提供当前断点列表,并且能够禁用或者启用断点、删除、添加、编辑断点。如果要编辑断点属性,其实是通过右键菜单里的“位置”项,它类似于新建断点里的文件断点,呵呵,VS2005真是把东西都做的更细化了,把很多原来通过一个窗口多个Tab页的方式变为直接了当的方式。

    (4) 条件中断

    可以通过断点窗口里来操作,在断点的右键上下文菜单中选择“条件”就可以进行设置了。中断条件表达式可以是任何符合调试器表达式标准的表达式,可以包括关系运算符和非关系运算符+、-、&&等。变量和对象属性也都可以作为表达式的一部分。完整的调式器合法表达式列表地址如下:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/vchowusingexpressionsindebugger.asp

    (5) 控制断点的命中次数

    可以通过断点窗口里来操作,在断点的右键上下文菜单中选择“命中次数”就可以进行设置了。可以设置为总是中断、大于等于、等于、几倍关系。对于在循环中的特定循环因子数值时很有用。

    # Hack 37.  检查断点故障

    断点有时不能正常工作,微软负责开发VS调试器的领导提供了一个在线小Web程序来帮助解决断点问题。利用这个工具,通过交互式的问答形式可以获得一些解决问题的建议。

    http://www.controlav.com/bphelper

    # Hack 38.  自定义VS的异常处理

    VS进入中断模式有两种情况:第一,就是断点;第二,就是通过异常;你很可能希望当异常出现时,无论它是否被处理,都进入中断模式。VS可以定制为当某种特定的异常出现时迅速进入中断模式。

    (1) 使用异常对话框 
    通过菜单“调试->异常”或者快捷键Ctrl+Alt+E调出异常对话框,它允许指定当遇上某种特定类型异常时VS的行为,缺省行为就是当异常抛出时继续,如果未被处理则进入调试器。若要修改某种异常类型的设置,只要在异常树状列表中选择它,并自定义单选按钮来指定调试器的行为。

    注意:修改某种异常类型的行为会影响到它的衍生异常类型的行为。

    (2) 添加自定义异常

    通过异常对话框可以改变针对系统异常的调试器行为,但是你有可能想对自己创建的异常定义行为。要达到这个目的,就选择异常树的顶层项,然后点“添加”按钮来进行添加,输入异常的名字时要输入完整的名字,包括命名空间,大小写敏感。对于自定义的异常,可以进行删除。

    (3) 快速查找异常名称

    通过异常对话框可以通过异常的名称快速进行定位。

    # Hack 39.  调试脚本

    VS具有强大的调试功能,在Web项目方面也很强,不仅针对ASP.NET,而且对于JavaScript和VBScript脚本也有严格的调试功能。这里将介绍如何设置VS让你在浏览器里来调试脚本。

    要在浏览器里调试脚本,以IE6为例,首先要启用浏览器的脚本调试功能,具体如下:

    a. 打开IE; 
    b. 选择“工具->Internet选项”,在窗口选择“高级”页面,并去掉“禁用脚本调试”前的复选框的对勾; 
    c. 重新启动浏览器,则会发现浏览器的“查看”菜单下多了一项“脚本调试程序”;

    一旦启用了脚本调试功能,你可以以多种方式来调试脚本:

    第一种就是利用“脚本调试程序”下的两个子菜单项,你可以选择“打开”,则会打开调试器,然后设置断点;另外一个选项就是在下一条语句中断,这会导致当运行到下一语句时进入调试器。

    第二种就是从VS内部开始调试,用VS打开Web项目并启动调试器。启动调试后,你需要访问文档窗口,可以通过选择“调试->窗口->文档窗口”或者快捷键Ctrl+Alt+N来启用打开。此窗口显示了当前运行的Web文档的列表,通常仅包含一个页面,在利用帧框架时可能会有不止一个文档。选择要调试的文档,那个文档的HTML输出会显示为一个正常的HTML文件。可以设置断点并进行调试。

     

    展开全文
  • VS断点调试技巧

    2020-05-28 10:29:43
    当你一个变量外部被改掉 单步调试或者查找引用分析,花费时间太大,我们应该怎么办,这时我们可以试试VS的数据断点。 数据断点能有效的检测对象数据的变化。当一个复杂程序(或者多线程中)有很多地方都可能改变某...

    1.数据断点

    当你一个变量外部被改掉 单步调试或者查找引用分析,花费时间太大,我们应该怎么办,这时我们可以试试VS的数据断点。

    数据断点能有效的检测对象数据的变化。当一个复杂程序(或者多线程中)有很多地方都可能改变某一个对象的值,如果一个对象被莫名更改而不知道是哪里对其做了修改,那么数据断点就派上用场了。数据断点创建后当程序修改此对象时程序就会中断运行,方便开发人员找到修改对象的代码位置。

    2.学会查看调试窗口

    当断点触发,这时我们可以查看调试-》窗口-》线程来查看当前运行的线程状态,比如一个线程卡死了,用这种方法可以看出究竟在等什么。

    也要学会用调试-》窗口-》内存来查看一些比如指针数据的数值,比如void*的值。

    展开全文
  • VS断点调试简单笔记

    2020-12-21 02:50:10
    如果编译没有错误提示,运行时崩溃或者是结果和预期不一致,这时我们就可以使用断点调试。 如果是编译器报错,直接根据报错信息查找修改即可,这种情况不需要使用断点调试。 使用方法 在你觉得有错误的地方加断点,...

    使用条件

    如果编译没有错误提示,运行时崩溃或者是结果和预期不一致,这时我们就可以使用断点调试。
    如果是编译器报错,直接根据报错信息查找修改即可,这种情况不需要使用断点调试。

    使用方法

    在你觉得有错误的地方加断点,如果代码太多不知道哪里,可以二分法加断点,不断缩小错误的范围。

    断点就是程序运行到你加断点的位置就暂停了,这时候可以观察程序中各个变量的状态。

    举例

    比如你的断点打在第10行,程序只会执行到第9行,执行完第9行,准备执行第10行的状态,程序会在这一步停止。
    如果此时程序并没有崩溃,则说明断点前的程序没问题的,这时候我们点击工具栏中的逐语句F(11),就会执行我们加断点的这一行,也就是执行第10行(也可以逐过程)。

    如果加断点的那行是函数(标准库的函数),最好使用逐过程,否则使用逐语句的话,会跳到函数的内部去执行(没必要)。当然如果是自己写的函数,可以使用逐语句。
    如果不小心使用逐语句跳到函数内部了,可以点击跳出

    在点击逐语句(逐过程)后,第10行就执行完了,此时还是暂停的状态(准备执行第11行),因为执行完第10行执行效果也会出来,如果此行没问题,就继续以此类推执行下去…直到报错就可以确定错误的那行。

    展开全文
  • 在Unity中,用VS进行断点调试时,老是卡住,编辑器无响应,要很久很久才能动,很是影响效率,在网上找到几种解决办法,貌似有点效果。 1、网上有说是VS占用CPU太高导致的,在VS的安装目录下,找到serviceshub....
  • 浏览器调试VS调试 设置/取消断点:F9 开始/继续调试:F5 执行到下一个断点 逐语句(执行当前层次的内层的语句):F8 / F11 逐过程(执行当前层次的语句):(shift+F8) / F10 逐层跳出内层次:(ctrl+shift+F8) 监视...
  • 本文介绍了如何配置一个Lua工程, 并让它支持命令行运行和vs断点调试。创建此工程的目的是,写一些脚本用于检测策划填写的数据的正确性。既然表格要转为lua文件, 索性创建一个lua的工程, 将运行命令添加入编译表格...
  • vs2010断点调试技巧分享 设置断点:在如下图中的红色圆点处设置断点,红色圆点表示已经在这行设置断点。快捷键F9。 启动调试:按F5或者点击左边红框中的按钮。右边框是开始执行(不调试)Ctrl+F5。 ...
  • 只通过Vs断点调试安卓Unity游戏

    千次阅读 2017-11-26 22:26:00
    这是我自己摸索出的方法,直接只通过使用VS,甚至不通过Unity直接断点调试手机上Unity实例,不得不承认vs的强大 我使用的是VS2017,不清楚其他版本VS是否也有这个功能 首先在电脑使用一个wifi软件开个wifi给自己的...
  • 断点调试 软件断点是一条特定的指令(在x86中是int 3),当程序执行到INT 3指令时,会引发软件中断。 OS 就会停止进程,在 Linux上, OS 会发送给进程一个信号 —— SIGTRAP。 这个时候调试器可以做以下工作: 在...
  • vs 断点调试错位的问题

    千次阅读 2018-07-12 15:19:31
    重新编译无数遍没有解决问题,最后将cpp用notepad++ 打开,在右下角将cpp转为了Windows格式问题解决
  • 程序运行到断点处就不再执行。 设置断点方法: (1)鼠标左键点击代码左侧灰色带。 (2)启动程序程序在断点前停止。再按f11键程序继续往下执行。
  • 下面就跟大家说说如何在一个已经部署了的网站上进行断点调试(前提 有网站源码)。 如图(DH)是一个已经部署好的网站: 第一步:我们通过VS打开该网站程序,在出错的页面后台相应位置设置断点 如图: 第二步:...
  • vs不能调试其实问题在于,在空项目中不生成调试文件pdb,所以无法调试。 要让项目生成pdb文件,需要更改:  项目属性,configuration properties->linker->Generate Debug Info 从 no 改为 yes (项目属性:...
  • 例如在某一个调试中,向下走过了,那么怎么解决能回到上一步呢? 用鼠标拖拉一下,小箭头的位置是可以移动的 注意点:这个方式也是有后遗症的,那就是初始化后指针变量再拖回去会变成空指针。 ...
  • 以前调试都好好的,现在变成这样了, 请看图, [img=http://img.my.csdn.net/uploads/201211/06/1352182116_7502.png], 桌面右下角还多了一个这个, [/img][img=... 我没法进行正常调试了, 这个服务能关掉或者删除吗?
  • VS2017断点调试

    万次阅读 多人点赞 2018-05-29 08:40:15
    VS2017调试技巧阅读目录一、查看或修改变量的值二、控制线程下一步要执行的代码位置阅读目录Visual Studio的调试技巧演示环境:演示用的代码:基本概念:断点在数据被改变/读取的时候挂起(面向对象版数据断点)多线程...
  • VS2019断点调试技巧

    千次阅读 2020-07-28 17:02:56
    vs2019断点调试时不光能够修改代码,而且将修改的代码放在断点下方,继续执行还能走最新添加的代码,不需要重启。大家可以试一试。
  • 2:单步调试,快捷键f11,单步调试可以逐步运行,也可以在断点调试下接单步,进而可以仔细检查每一步是否符合预期,f10是逐过程调试,不会进入函数块 //再次强调,单步调试可以检查每一步是否符合预期,比如for循环是否...
  • 使用 VS Code 断点调试

    2020-01-07 11:18:16
    直接在 Chrome 的调试窗口中调试 Vue 代码有诸多不便, 好在 Visual Studio Code 中提供了 Debugger for Chrome 插件,能够通过配置直接在 VS Code 断点调试代码, 并且在 VS Code 的调试窗口看到 Chrome 中 c...
  • VS设置断点调试

    万次阅读 2018-07-30 08:51:25
    掌握VS2010调试 -- 入门指南 https://blog.csdn.net/kingzone_2008/article/details/8133048
  • 实际项目开发中,项目很大,用VS断点调试UNITY项目时,UNITY常常卡住,甚至有时每次必卡。 这原因是由于项目开久了,unity的libaray文件夹越来越复杂,可能会导致一些UNITY的BUG,也会导致调试卡住。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,152
精华内容 1,260
关键字:

vs断点调试