开始调试 VS 项目;附加到进程;中断代码;单步执行代码;运行到光标处;运行到调用堆栈上的函数;设置下一语句;单步执行“仅我的代码”;停止并重新开始调试;从调试的进程分离。
开始调试 VS 项目
如果打开的解决方案是 Visual Studio,你有三种方法来开始调试:
选择“调试”、“启动调试”(键盘:F5)。 | 你的应用程序将启动然后运行,直到:
|
选择“调试”、“单步执行”(键盘:F11)或“调试”、“逐过程”(键盘:F10)。 | 你的应用程序将启动,然后在第一行中断。 |
在源窗口中,选择执行代码中的某行,然后在上下文菜单上选择“运行到光标处”。 | 你的应用程序将启动,并一直运行到断点或光标位置,具体取决于断点在前还是光标在前。 |
调试期间,若要在代码映射上对你的代码执行进行可视化跟踪,请参阅在 Visual Studio 中调试时映射调用堆栈上的方法。
附加到进程
调试器还可以附加到正在 Visual Studio 外的过程中运行的程序。 一旦附加到某个程序,就可以使用调试器执行命令、检查程序状态,等等。 检查程序的能力可能会受到某些限制,这取决于程序是否用调试信息生成,是否可以访问程序源代码,以及公共语言运行时 JIT 编译器是否在跟踪调试信息。
附加到本地计算机上运行的进程
选择“调试”,“附加到进程”。 在“附加到进程”对话框中,从“可用进程”列表中选择进程,然后选择“附加”。

有关更多信息,请参见使用 Visual Studio 调试器附加到运行的进程。
-
Break into code by using breakpoints or Break All | Step into, over, or out of the code | Run to a specified location or function | Set the next statement to execute | Restrict stepping to Just My Code | Step into system calls | Step into properties and operators in managed code
使用断点或“全部中断”中断代码
用 VS 调试器调试应用程序时,应用程序或者正在运行(执行)或处于中断模式。
当执行到达断点或发生异常时,调试器将中断应用程序的执行。 你还可以随时手动中断执行。
断点是一个信号,它通知调试器在某个特定点上暂时将应用程序执行挂起。 当执行在某个断点处挂起时,我们称程序处于中断模式。 进入中断模式并不会停止或结束程序的执行;执行可以在任何时候继续。
大多数调试器功能(例如,在本地窗口中查看变量值,或在“监视”窗口中计算表达式)仅在中断模式下可用。 应用程序的所有元素都将保留(例如,函数、变量和对象都保留在内存中),但其移动和活动将被挂起。 在中断模式下,你可以检查元素的位置和状态,以查看是否存在冲突或 Bug。 在中断模式下,你还可以对应用程序进行调整。
你可以配置断点,挂起基于多种情况的执行。 请参阅断点:使用命中次数、调用堆栈函数和条件在 Visual Studio 调试器中您所需的时间和位置进行中断。 本节描述两种中断代码的基本方式。
在代码中设置断点
若要在代码中设置简单断点,请打开 Visual Studio 编辑器中的源文件。 设置光标要中断的代码行,然后在上下文菜单上选择“断点”、“插入断点”(键盘:F9)。 调试器将在执行该代码行之前中断执行。

Visual Studio 中的断点提供了一组丰富的附加功能,例如条件断点和跟踪点。 请参阅断点:使用命中次数、调用堆栈函数和条件在 Visual Studio 调试器中您所需的时间和位置进行中断。
手动中断代码
若要在正在执行的应用程序上,中断下一个可用的代码行,请选择“调试”、“全部中断”(键盘:Ctrl+Alt+Break)。
-
如果使用“仅我的代码”选项进行调试,则可以在项目的下一个代码行中断执行。 请参阅Restrict stepping to Just My Code。
-
如果正在调试多个程序,则默认情况下,断点或“全部中断”命令将影响所有被调试的程序。 请参阅Configure the execution behavior of multiple processes。
-
如果中断正在执行的代码,而没有响应的源或符号 (.pdf) 文件,调试器将显示“未找到源文件”或“未找到符号”页面,帮助你找到相应的文件。 请参阅在 Visual Studio 调试器中指定符号 (.pdb) 和源文件。
如果你无法访问支持文件,仍可以在“反汇编”窗口中调试汇编指令。
单步执行、逐过程执行或跳出代码
“单步执行”是最常见的调试过程之一。 “单步执行”即一次执行一行代码。 当你暂停执行时(例如运行调试器到断点),可以使用三个“调试”菜单命令来单步执行代码:
菜单命令 | 键盘快捷键 | 描述 |
---|---|---|
逐语句 | F11 | 如果某一行包含函数调用,“逐语句”仅执行调用本身,然后在函数内的第一个代码行处停止。 否则,请“逐语句”执行下一语句。 |
逐过程 | F10 | 如果某一行包含函数调用,则“逐过程”执行调用函数,然后在调用函数的第一个代码行处停止。 否则,请“逐语句”执行下一语句。 |
跳出 | Shift+F11 | “跳出”将一直执行代码,直到函数返回,然后在调用函数中的返回点处中断。 |
-
在嵌套函数调用上,“逐语句”将进入并单步执行嵌套最深的函数。 如果对类似 Func1(Func2()) 的调用使用“逐语句”,调试器将进入并单步执行函数 Func2。
-
实际上,调试器逐句通过代码语句,而不是物理行。 例如,if 子句可以写在一行内:
当你单步执行此行时,调试器将该条件视为一步,将结果视为另一步(在此示例中,条件为 true)。
若要在逐步执行函数的过程中,对调用堆栈进行可视化跟踪,请参阅在 Visual Studio 中调试时映射调用堆栈上的方法。
运行至指定位置或函数
有时,你想执行到代码中的某一点,然后停止执行。 如果在想要中断的位置设置了断点,请选择“调试”、“启动调试”,如果还未启动调试,可以选择“调试”、“继续”。(这两种情况下的快捷键都是 F5。) 执行代码时,调试器将在下一个断点停止。 选择“调试”、“继续”,直至到达所需的断点。
你还可以运行到代码编辑器中光标停放的位置,或者运行到指定的函数。
运行到光标处
若要运行到光标位置,请将光标放在源窗口中可执行的代码行上。 在编辑器的上下文菜单上,选择“运行到光标”。
在调用堆栈上运行到函数
在“调用堆栈”窗口中,选择函数,然后从上下文菜单选择“运行到光标”。 若要对调用堆栈进行可视化跟踪,请参阅在 Visual Studio 中调试时映射调用堆栈上的方法。
运行到通过名称指定的函数
可以命令调试器运行应用程序,直至到达指定的函数。 你可以通过名称指定函数,也可以从调用堆栈中选择函数。
若要通过名称指定函数,请选择“调试”、“新建断点”、“在函数处中断”,然后输入函数名称和其他标识信息。

如果是重载函数,或者函数在多个命名空间,你可以在“选择断点”对话框中选择想要的函数。

设置要执行的下一语句
将调试器中断后,你可以移动执行点,设置下一个要执行的代码语句。 源窗口或“反汇编”窗口的空白区域中的黄色箭头标记要执行的下一条语句的位置。 通过移动此箭头,可以跳过部分代码或返回到以前执行过的行。 在某些情况下可以使用此方法,例如,跳过包含已知 bug 的代码段。

若要设置下一个执行的语句,请使用以下过程之一:
-
在源窗口中,将黄色箭头拖动希望执行下一语句的位置,该位置应在同一源文件。
-
在源窗口中,将光标放置在希望执行的下一行上,然后在上下文菜单上选择“设置下一语句”。
-
在“反汇编”窗口中,将光标放置在希望执行的下一汇编指令上,然后在上下文菜单上选择“设置下一语句”。
![]() |
---|
设置下一条语句将导致程序计数器直接跳到新位置。 使用此命令时要小心:
|
![]() |
---|
在托管代码中,在以下情况下不能移动下一条语句:
|
应用程序处于活动运行状态时不能设置下一条语句。 要设置下一语句,调试器必须处于中断模式。
限制单步执行“仅我的代码”
有时,你在调试过程中可能只希望查看自己编写的代码,而忽略其他代码(如系统调用)。 为此,可以使用“仅我的代码”调试。 “仅我的代码”将隐藏非用户代码,从而使这些代码不出现在调试器窗口中。 单步执行时,调试器逐句通过所有非用户代码,但不在其中停止。 请参见仅我的代码
![]() |
---|
设备项目不支持“仅我的代码”。 |
单步执行系统调用
如果你已加载系统代码的调试符号,且未启用“仅我的代码”,则可以单步执行系统调用,就像可以单步执行其他任何调用一样。
要了解如何禁用“仅我的代码”,请参阅Restrict stepping to Just My Code
若要访问 Microsoft 符号文件,请参阅在 Visual Studio 调试器中指定符号 (.pdb) 和源文件主题中的Use symbol servers to find symbol files not on your local machine。
在调试时加载特定系统组件的符号:
-
打开“模块”窗口(键盘:Ctrl+Alt+U)。
-
选择要加载符号的模块。
查看“符号状态”列可以了解哪些模块加载了符号。
-
在上下文菜单中选择“加载符号”。
单步执行托管代码中的属性和运算符
默认情况下,调试器将逐过程执行托管代码中的属性和运算符。 在多数情况下,这会提供较好的调试体验。 若要启用单步执行属性或运算符,请选择“调试”、“选项和设置”。 在“调试”、“常规”页面上,清除“逐过程执行属性和运算符(仅限托管)”复选框
停止调试意味着终止调试会话。 停止执行意味着终止正调试的进程并结束调试会话。 请勿与中断执行混淆,后者意味着暂停正在调试的进程的执行但调试会话仍处于活动状态。 从进程分离将停止调试进程,但进程仍会运行。
-
Stop debugging from VS | Close the app that is being debugged | Restart debugging | Detach from the debugged app
停止 VS 调试
选择“调试”、“停止调试”,当程序从 Visual Studio 启动时,终止正在调试的进程。 如果程序附加到进程,而不是从 Visual Studio 启动,则该进程仍继续运行。
关闭正在调试的应用
当你退出正在调试的应用时,调试将自动终止。
重新启动调试
选择“调试”、“重新启动”,停止当前正在调试的会话并重新启动调试器中的启动项目。
从所调试的应用程序分离
选择“调试”、“全部分离”来停止调试,但被调试的进程仍保持运行。
Visual Studio 调试器提供了各种用于检查和修改程序状态的工具。 这些工具中的大多数仅在中断模式下有效。
可视化工具是 Visual Studio 调试器的新组件,通过它可以以有意义的方式查看对象或变量的内容。 例如,可以使用 HTML 可视化工具来查看 HTML 字符串,因为这样可以解释该字符串并在浏览器中显示出来。 你可以通过数据提示、“监视”窗口、“自动”窗口、“局部变量”窗口或“快速监视”对话框来访问可视化工具。 有关详细信息,请参阅可视化工具。
在 Visual Studio 中调试时映射调用堆栈上的方法
创建代码图,以便在调试时对调用堆栈进行可视化跟踪。 你可以在图中进行标注以跟踪代码执行的操作,以便专注于查找 Bug。

你将需要:
-
可调试的代码,例如 Visual C# .NET、Visual Basic .NET、C++ 和 JavaScript。 若要可视化在同一个解决方案中多个应用之间共享的代码或者适用于 Microsoft Dynamics AX 的 X++ 代码,请确保你有 Visual Studio 2013 Update 2 或更高版本。
请参阅:视频:利用代码图调试器集成实现可视化调试 (Channel 9) • Map the call stack • Make notes about the code • Update the map with the next call stack •Add related code to the map • Find bugs using the map • Q & A
-
开始调试。 (键盘:“F5”)
-
在你的应用进入中断模式或你单步执行某一函数之后,请选择“代码图”。 (键盘:Ctrl + Shift + `)
当前的调用堆栈在新代码图上显示为橙色:
在你继续调试时,该代码图将自动更新。 请参阅Update the map with the next call stack。
-
并非所有调用都会显示在图中。 为什么?
默认情况下,只有你的代码会显示在图中。 若要查看外部代码,请在“调用堆栈”窗口中将它打开或在 Visual Studio 调试选项中关闭“启用‘仅我的代码’”。
-
更改图是否会影响代码?
更改图不会对代码造成任何影响。 你可随意在图上重命名、移动或移除任何内容。
-
这个消息是什么意思:“关系图可能基于旧版本的代码”?
在你上次更新图后,代码可能已发生更改。 例如,图中的某个调用可能已在代码中不存在了。 请关闭此消息,然后在再次更新图之前,尝试重新生成解决方案。
-
我如何控制图的布局?
打开图工具栏上的“布局”菜单:
-
更改默认布局。
-
若要停止自动重新排列图,请关闭“调试时自动布局”。
-
若要在添加新项时尽可能少地重新排列图,请关闭“增量布局”。
-
-
我能否与他人共享此图?
你可以导出映射,将其发送给他人(如果你有 Microsoft Outlook)或保存到你的解决方案中,以便你将其签入 Team Foundation 版本控制。
-
我如何停止此图自动添加新的调用堆栈?
选择图工具栏上的 。 若要手动向图中添加当前的调用堆栈,请按 Ctrl + Shift + `。
在你进行调试时,图中将继续突出显示现有调用堆栈。
-
项图标和箭头代表什么?
若要获取有关项的详细信息,请查看项的工具提示。 你还可以查看“图例”来了解每个图标的含义。