使用.NET命令行编译器编译项目(如ASP.NET、C#等)(9)

在 .NET 程序集的开发和测试期间,在命令行定义符号可能有所帮助。这样做可以快速地即时指定符号,而不必更新代码基。为了进行说明,假设您希望在命令行定义 DEBUG 符号,则请使用 /define 选项:

csc /define:DEBUG *.cs

当您再次运行该应用程序时,您应当看到显示“DEBUG symbol defined”— 即使 #define 语句已经被注释掉。


csc.exe 的以调试为中心的选项

即使是最好的程序员,有时也会发现有对他们的代码基进行调试的需要。尽管我假设大多数读者更喜欢使用 Visual Studio .NET 进行调试活动,但对 csc.exe 的一些以调试为中心的选项(表 6)进行说明是值得的。

6. csc.exe 的以调试为中心的选项

csc.exe 的以调试为中心的选项

定义


/debug

 

指示 csc.exe 发出一个 *.pdb 文件,以供调试工具(例如,cordbg.exe、dbgclr.exe 或 Visual Studio)使用。

 

/warnaserror

 

将所有警告视为严重错误。

 

/warn

 

使您可以指定当前编译的警告级别(0、1、2、3 或 4)。

 

/nowarn

 

使您可以禁用特定的 C# 编译器警告。

 

/bugreport

 

如果应用程序在运行时出现故障,则该选项可生成错误日志。该选项将提示您输入纠正信息以发送到您希望的任何地方(例如,QA 小组)。

 

要说明 /debug 选项的用法,我们首先需要在我们的 finalEx.cs 代码文件中插入一些编码错误。请将以下代码添加到当前的 Main() 方法中:

// Create an array. string[] myStrings = {"Csc.exe is cool"}; // Go out of bounds. Console.WriteLine(myStrings[1]);

正如您可以看到的那样,我们试图使用越界索引访问我们的数组的内容。如果您重新编译和运行该程序,则会得到 IndexOutOfRangeException。尽管我们可以明显地指出该错误,但假如是一个不那么明显的更为复杂的错误,又该怎么办呢?

要调试使用 csc.exe 创建的程序集,第一步是生成包含各种 .NET 调试实用工具所需信息的 *.pdb 文件。为此,请输入下列命令(它们在功能上是等效的)之一:

csc /debug *.cs csc /debug+ *.cs

此时,您应当在应用程序目录中看到一个名为 finalEx.pdb 的新文件,如图 12 所示。

使用.NET命令行编译器编译项目(如ASP.NET、C#等)

图 12. 应用程序目录中的新 finalEx.pdb

可以根据情况用 full 或 pdbonly 标记限定 /debug 标志。当您指定 /debug:full(它是默认标记)时,将以适当的方式对程序集进行修改,以使其可以附加到当前正在执行的调试器。既然该选项能够 影响所产生的 .NET 程序集的大小和速度,那么请确保只在调试过程中指定该选项。因为 full 是 /debug 标志的默认行为,所以上述所有选项在功能上是等效的:

csc /debug *.cs csc /debug+ *.cs csc /debug:full *.cs

另一方面,指定 /debug:pdbonly 可以生成一个 *.pdb 文件,以及一个只能在程序由调试工具直接启动时进行调试的程序集:

csc /debug:pdbonly *.cs

在任何情况下,既然您具有必需的 *.pdb 文件,那么您就可以使用许多调试工具(cordbg.exe、dbgclr.exe 或 Visual Studio)调试应用程序。为了不偏离本文的重点介绍命令行这一特征,我们将使用 cordbg.exe 实用工具调试该程序:

cordbg finalEx.exe

在调试会话开始以后,您就可以使用 so(单步执行)命令单步执行每个代码行了。当您单击出错的代码行时,您可以找到如图 13 所示的代码转储。

使用.NET命令行编译器编译项目(如ASP.NET、C#等)

图 13. 单步执行命令代码转储

要终止 cordbg.exe 实用工具,请键入 exit 并按 Return 键。

本文的重点不是解释 .NET 调试工具的用法。如果您希望了解有关在命令行进行调试的过程的更多信息,请在 Visual Studio 帮助系统内查找“cordbg.exe”。


杂项

至此,您已经了解了 C# 命令行编译器的核心选项背后的详细信息。为了使本文的内容更加完整,表 7 简要描述了我尚未谈论到的其余标志。

7. csc.exe 的其余选项

csc.exe 的其余选项

定义


/baseaddress

 

该选项使您可以指定加载 *.dll 的预期基址。默认情况下,该基址由 CLR 选择。

 

/checked

 

指定溢出数据类型界限的整数运算是否会在运行时导致异常。

 

/codepage

 

指定要用于编译中的所有源代码文件的代码页。

 

/filealign

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjfzjj.html