zoukankan      html  css  js  c++  java
  • Visual Studio调试器指南---控制执行

    Visual Studio 调试器提供了功能强大的命令来控制应用程序的执行。 下面描述了为控制执行利用调试器命令可执行的任务:

    • 开始(或继续)执行

    • 中断执行

    • 停止执行

    • 逐句通过应用程序

    • 运行到指定的位置

    • 设置执行点

    开始执行

    开始执行是最基本的调试功能之一。

    1. 在“调试”菜单上选择“开始”、“逐语句”或“逐过程”。

      - 或 -

    2. 在源窗口中,右击可执行代码中的某行,然后选择“运行到光标处”。

    如果选择“启动”,则应用程序启动并一直运行到断点。 可以在任何时刻中断执行,以检查值,修改变量,或检查程序状态。

    若选择了“逐语句”或“逐过程”,应用程序会启动并执行,然后在第一行中断。如果选择“运行到光标处”,则应用程序启动并一直运行到断点或光标位置,具体看是断点在前还是光标在前。 可以在源窗口中设置光标位置。 某些情况下,不出现中断。 这意味着执行始终未到达设置光标处的代码。

    解决方案可能包含不止一个项目。 这时候,可以选择将由“调试”菜单执行命令启动的启动项目。 或者,也可以从“解决方案资源管理器”启动选定的项目。可以使用“调试”菜单上的“开始执行(不调试)”命令,在不使用调试器的情况下开始执行项目。

    中断执行

    当用 Visual Studio 调试器调试应用程序时,应用程序或者正在运行(执行)或处于中断模式。 大多数调试器功能(比如在**“监视”**窗口中计算表达式)只在中断模式下可用。当执行到达一个断点或发生异常,调试器将中断程序的执行。 您可以随时手动中断执行。 如果在执行没有相应源的代码时中断,将能够在“反汇编”窗口中进行调试。

    手动中断程序执行

    • 在“调试”菜单上,单击“全部中断”。

      调试器将停止所有在调试器下运行的程序的执行。 程序并不退出,可以随时恢复执行。 调试器和应用程序现在处于中断模式。

    如果正在调试多个程序,则默认情况下,断点或“全部中断”命令将影响所有被调试的程序。 如果想仅中断当前程序,可以更改该默认值。

    更改调试多个程序时的中断行为

    1. 在“工具”菜单上,单击“选项”。

    2. 在“选项”对话框中,选择“调试”文件夹,并单击“常规”类别。

    3. 切换“一个进程中断时则中断所有进程”。

    4. 单击“确定”。

    停止调试或停止执行

    停止调试意味着终止调试会话。 停止执行意味着终止正调试的进程并结束调试会话。 请勿与中断执行混淆,后者意味着暂停正在调试的进程的执行但调试会话仍处于活动状态。

    停止调试

    • 在“调试”菜单上,选择“停止调试”。

    如果程序是从 Visual Studio 启动的,则**“停止调试”终止正调试的进程。 如果程序附加到进程,而不是从 Visual Studio 启动的,则该进程仍继续运行。 如果要终止被附加的进程,可以通过“进程窗口”终止单个进程,或者通过“全部终止”**命令终止所有被附加的进程。

    终止所有正调试的被附加进程

    • 在“调试”菜单上选择“全部终止”。

    如果要停止当前正在调试的运行并立刻开始新运行,可以使用**“重新启动”**命令。

    停止调试并重新启动

    • 在“调试”菜单上选择“重新启动”。

    “重新启动”**停止当前正在调试的会话,并重启启动项目。

    如果退出正在调试的应用程序,调试将自动停止。 如果正在调试多个程序,调试将继续进行,直到退出了最后一个程序。 如果调试的是由其他应用程序承载的项目(如由 Microsoft Internet Explorer 承载的 Web 项目),若退出宿主应用程序(如 Microsoft Internet Explorer),调试将停止。

    在 Visual Basic 和 C# 中,如果正在调试一个 Web 服务,而使用该服务的客户端应用程序被终止了,则 Web 服务的调试也会停止。

    单步执行

    “单步执行”是最常见的调试过程之一。 “单步执行”即一次执行一行代码。

    “调试”菜单提供了三个逐句通过代码的命令:

    • 逐语句

    • 逐过程

    • 跳出

    “逐语句”和“逐过程”的差异仅在于它们处理函数调用的方式不同。 这两个命令都指示调试器执行下一行的代码。 如果某一行包含函数调用,“逐语句”仅执行调用本身,然后在函数内的第一个代码行处停止。 而“逐过程”执行整个函数,然后在函数外的第一行处停止。 如果要查看函数调用的内容,请使用“逐语句”。 若要避免单步执行函数,请使用“逐过程”。

    在嵌套函数调用上,“逐语句”将进入并单步执行嵌套最深的函数。 如果对类似 Func1(Func2()) 的调用使用“逐语句”,调试器将进入并单步执行函数 Func2。如果要进入并单步执行特定的嵌套函数,请使用快捷菜单中的“单步执行特定函数”命令。 位于函数调用的内部并想返回到调用函数时,请使用“跳出”**。 “跳出”将一直执行代码,直到函数返回,然后在调用函数中的返回点处中断。

    运行到指定位置

    有时,在调试过程中,您想执行到代码中的某一点,然后中断。 如果在要中断的位置设置了断点,则可以实现上述目的。

    运行到已设置断点的指定位置

    • 在“调试”菜单上,单击“启动”或“继续”。

      您其实不需要在任何情况下都设置断点。 Visual Studio 调试器提供特定命令以运行到光标位置或运行到指定的函数。

    设置下一语句

    在 Visual Studio 调试器中,可以移动执行点来设置要执行的下一条代码语句。 源窗口或“反汇编”窗口的空白区域中的黄色箭头标记要执行的下一条语句的位置。 通过移动此箭头,可以跳过部分代码或返回到以前执行过的行。 在某些情况下可以使用此方法,例如,跳过包含已知 bug 的代码段。注意:设置下一条语句将导致程序计数器直接跳到新位置。 使用此命令时要小心以下情况:

    • 不执行旧执行点和新执行点之间的指令。

    • 如果向后移动执行点,则不撤消插入的指令。

    • 将下一条语句移动到另一个函数或范围通常会导致调用堆栈损坏,导致一个运行时错误或异常。 如果尝试将下一条语句移动到另一个范围,则调试器将打开一个含有警告的对话框,并提供一个取消该操作的机会。 在 Visual Basic 中,不能将下一条语句移动到另一个范围或函数。

    • 在本机 C++ 中,如果已启用运行时检查,则设置下一条语句会导致执行到达方法的结尾时引发异常。

    • 当启用“编辑并继续”时,如果您做出了“编辑并继续”无法立即重新映射的编辑,则“设置下一语句”将失败。 例如,如果您编辑了 catch 块中的代码,将发生这种情况。 发生这种情况时,您将看到类似如下的错误消息:“无法将下一语句设置到此位置。不支持操作。未知错误: 错误号”

    在托管代码中,在以下情况下不能移动下一条语句:

    • 下一条语句与当前语句不在同一个方法中。

    • 使用实时调试启动调试。

    • 正在展开一个调用堆栈。

    • 已引发一个 System.StackOverflowException 或 System.Threading.ThreadAbortException 异常。

    应用程序处于活动运行状态时不能设置下一条语句。 要设置下一语句,调试器必须处于中断模式。

    设置要执行的下一语句

    • 在源窗口中,单击黄色箭头,要将下一条语句设置到哪个位置,就将箭头拖到该位置,该位置应在同一源文件中

      - 或 -

    • 在源窗口中,右击要执行的下一条语句,然后选择“设置下一语句”。

    • 在“反汇编”窗口中,右击要执行的下一条汇编语言指令,然后选择“设置下一语句”。

  • 相关阅读:
    Prototype源码浅析——String部分(四)之补充
    改造alert的引发的争论【基本类型与引用类型】
    Eclipse rcp 窗口激活
    Eclipse statusLine 加入进度信息
    线的匹配
    python 文本搜索
    Eclipse rcp 编辑器行号显示
    CDT重建索引
    Eclipse rcp 数据存储
    CTabFolder 最大最小化
  • 原文地址:https://www.cnblogs.com/yilang/p/12456174.html
Copyright © 2011-2022 走看看