c#命令行无错误行号

Posted

技术标签:

【中文标题】c#命令行无错误行号【英文标题】:c# commandline no error line number 【发布时间】:2017-03-29 09:30:14 【问题描述】:

如果 .NET 代码中存在异常并且 PDB 文件可用,您通常会收到带有异常消息中显示的源代码行号的错误。这在命令行可执行文件中似乎有所不同,尽管 PDB 文件可用,但我没有得到任何行号:

Anwendung: MNX.CommandLine.EpkFtpEventhandler.exe Frameworkversion: v4.0.30319 Beschreibung: Der Prozess wurde aufgrund eines Ausnahmefehlers beendet. Ausnahmeinformationen: System.Data.SqlClient.SqlException Stapel: bei System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(System.String, Boolean, Int32, Boolean) bei System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(System.Threading.Tasks.TaskCompletionSource`1, System.String, Boolean, Int32, Boolean) bei System.Data.SqlClient.SqlCommand.ExecuteNonQuery() bei MNX.DB.WriteLocal(System.String) bei MNX.DB.Write(System.String) bei MNX.CommandLine.EpkFtpEventHandler.Main(System.String[])

有人知道为什么吗?

【问题讨论】:

您是否检查了消息以外的其他异常详细信息? 我能想到的唯一其他有用的细节是 StackTrace 属性,但我不认为它提供行号。如果这导致任何其他信息,我将尝试/捕获整个代码并报告。 【参考方案1】:

使用堆栈帧并用 try catch 包围您的代码:

try

     throw new Exception();

catch (Exception ex)

    // Get stack trace for the exception with source file information
    var st = new StackTrace(ex, true);
    // Get the top stack frame
    var frame = st.GetFrame(0);
    // Get the line number from the stack frame
    var line = frame.GetFileLineNumber();
    // Print the line number
    Console.WriteLine($"An Error (ex.Message) occurred in line line");

为了避免抄袭:我的想法来自this question。

我不知道为什么它通常不会显示在您的控制台应用程序中,但这也应该这样做。

【讨论】:

我只从 var line 得到 0 作为行号。 Exception.StackTrace 给了我行号。奇怪的是只有当我捕捉到异常时,而不是当它被抛出而没有被捕捉到时。【参考方案2】:

尝试通过访问 Debug > Options > Debugging > Symbols 来清空符号缓存,然后清理您的解决方案。

【讨论】:

这里没有使用 VS,命令行是使用 csc.exe 使用 /debug 标志编译的。错误消息是我在控制台输出和事件日志中得到的。【参考方案3】:

Exception.StackTrace 在捕获时返回行号。奇怪的是只有当我捕捉到异常时,而不是当它被抛出而没有被捕捉到时。

【讨论】:

以上是关于c#命令行无错误行号的主要内容,如果未能解决你的问题,请参考以下文章

从具有行号的表中选择到 c# 数据表给出错误

Java:Eclipse 中的行号与命令行中的行号相同吗? [关闭]

如何让vim编辑器永久显示行号和命令大全

Linux--Vi编辑命令(跳到指定行翻屏缩进)

C#应用程序如何不弹出cmd命令行窗口执行

vi的使用—命令行界面的储存离开行号等