山西念星科贸有限公司 2024-06-04 09:26 采纳率: 72%
浏览 3
已结题

C#自定义变量,在变量构造函数中定义了通过堆栈获取错误行号信息,但是出来的结果为0

问题遇到的现象和发生背景

C#自定义变量,在变量构造函数中定义了通过堆栈获取错误行号信息,但是出来的结果为0

用代码块功能插入代码
public class TheParameterPassedInIsAbnormalItIsNotDefinedInThMethod : ArgumentException
{
    public TheParameterPassedInIsAbnormalItIsNotDefinedInThMethod(string specificReasons) : base(specificReasons)
    {
        StackTrace stackTrace = new StackTrace();
        string lineNumber = stackTrace.GetFrame(1).GetFileLineNumber().ToString(); ----结果为0
    }
}
运行结果及详细报错内容

lineNumber 结果为0

我想要达到的结果

lineNumber 结果为正确的值

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-04 09:26
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    在C#中,StackTrace类用于获取当前线程的调用堆栈信息。然而,当使用StackTrace的默认构造函数时,它可能不会包含源代码文件信息,因此GetFileLineNumber()方法返回的行号为0。

    为了获取源代码文件信息,你需要在创建StackTrace实例时,指定true作为参数,以启用源代码文件信息的收集。同时,你还需要确保编译时启用了调试信息的生成。

    以下是修改后的代码示例:

    public class TheParameterPassedInIsAbnormalItIsNotDefinedInThMethod : ArgumentException
    {
        public TheParameterPassedInIsAbnormalItIsNotDefinedInThMethod(string specificReasons) : base(specificReasons)
        {
            StackTrace stackTrace = new StackTrace(true); // 启用源代码文件信息的收集
            StackFrame frame = stackTrace.GetFrame(1); // 获取调用堆栈的第二层(当前构造函数的第一层)
            if (frame != null)
            {
                string lineNumber = frame.GetFileLineNumber().ToString();
                Console.WriteLine("Line number: " + lineNumber);
            }
            else
            {
                Console.WriteLine("Line number information is not available.");
            }
        }
    }
    

    请注意以下几点:

    1. 你需要在项目属性中设置生成调试信息。在Visual Studio中,可以在项目属性的“生成”选项卡中设置“调试信息”为“完整”或“便携式”。
    2. 即使启用了源代码文件信息的收集,如果编译时没有生成调试信息,或者代码是经过混淆的,也可能无法获取行号信息。
    3. 使用StackTraceStackFrame可能会对性能产生影响,特别是在高频调用的场景中。

    关于参考资料,你可以查看以下链接:

    这些文档提供了关于如何使用StackTraceStackFrame类的详细信息。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月6日
  • 已采纳回答 6月4日
  • 创建了问题 6月4日

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。