Heim >Datenbank >MySQL-Tutorial >VS调试技巧

VS调试技巧

WBOY
WBOYOriginal
2016-06-07 15:11:41960Durchsuche

开始调试 从 “调试” 菜单中选择 “开始” 、 “逐语句” 或 “逐过程” 。 - 或 - 在源窗口中,右击可执行代码中的某行,然后从快捷菜单中选择 “运行到光标处” 。 如果选择“启动”,则应用程序启动并一直运行到断点。可以在任何时刻中断执行,以检查,

开始调试

  1. “调试”菜单中选择“开始”“逐语句”“逐过程”

    - 或 -

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

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

若选择了“逐语句”或“逐过程”,应用程序启动并执行,然后在第一行中断。

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


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

  • 逐语句

  • 逐过程

  • 跳出

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

在嵌套函数调用上,“逐语句”将进入并单步执行嵌套最深的函数。如果对类似 Func1(Func2()) 的调用使用“逐语句”,调试器将进入并单步执行函数 Func2

在本机代码中,如果要进入并单步执行特定的嵌套函数,请使用快捷菜单中的“单步执行特定函数”命令。

位于函数调用的内部并想返回到调用函数时,请使用“跳出”“跳出”将一直执行代码,直到函数返回,然后在调用函数中的返回点处中断。

参考http://msdn.microsoft.com/zh-cn/library/a3cwf295(v=vs.90).aspx

用“反汇编”窗口

只有在“选项”对话框中的“调试”节点下启用了地址级调试后,该功能才可用。但对于脚本或 SQL 调试是不可用的

“反汇编”窗口显示与编译器所创建的指令对应的汇编代码。如果正在调试托管代码,则这些汇编指令对应于由实时 (JIT) 编译器创建的本机代码,而不是由 Visual Studio 编译器生成的 Microsoft 中间语言 (MSIL)。
除汇编指令外,“反汇编”窗口还可显示如下可选信息:
每条指令所在的内存地址 对于本机应用程序,这是实际内存地址。对于 Visual Basic、C# 或托管代码,这是距离函数开头的偏移量。
程序集代码派生于的源代码。
代码字节 — 实际计算机或 MSIL 指令的字节表示形式。
内存地址的符号名。
对应于源代码的行号。
汇编语言指令由助记符(指令名称的缩写)和代表变量、寄存器以及常量的符号所组成。每一条机器语言指令由一个汇编语言助记符代表,通常其后还跟有一个或多个变量、寄存器或常量。
如果您无法阅读汇编语言但又想充分利用“反汇编”窗口,请参考有关汇编语言编程的好书。汇编语言编程超出了我们对“反汇编”窗口进行简单介绍的讨论范围。
汇编语言代码在很大程度上依赖处理器的寄存器(对托管代码而言,依赖公共语言运行库寄存器),您将发现协同使用“反汇编”窗口和“寄存器”窗口将很有用,可以允许您检查寄存器内容。
您很可能愿意使用汇编语言,而从来不会愿意或需要查看原始的、数字形式的机器代码指令。不过,如果愿意的话,可以利用“内存”窗口或从“反汇编”窗口的快捷菜单中选取“代码字节”来查看。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:sqlite数据库中的sql语句Nächster Artikel:一个动态ACL的案例