已部署应用的具有异常日志记录的行号

Line number with exception logging for deployed apps

提问人:m4rs___ 提问时间:10/23/2023 更新时间:10/24/2023 访问量:23

问:

我有一个 WPF 应用程序 (c#),我目前已通过 ClickOnce 部署。我有一个名为 LogTracker 的类,它可以捕获所有异常并将它们与用户等一些信息一起附加到文本文件中。

  AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
            {
                lt.depositLog(eventArgs.Exception, "CATCHALLEXCEPTIONREPORTER for " + user, logPath);
            };
        public void depositLog(Exception exception, string user, string path) 
        { 

            using (StreamWriter w = File.AppendText(path))

            {

                var st = new StackTrace(exception, true);

                var sourceFrame = Enumerable.Range(0, st.FrameCount).FirstOrDefault(i => st.GetFrame(i).GetFileLineNumber() > 0);
                w.WriteLine(version + user + "~~~~~  Encountered exception:   " + exception.ToString() + "STACKTRACE:  " + st.ToString() + sourceFrame.ToString());
            }
        }

基本上就是这样,很简单。我正在尝试找到一种方法来记录遇到异常的行号。我在这里的某处读到使用异常。ToString() 应该给我它,但只有当我在调试中从 Visual Studio 运行它时,它才有效。有没有办法让我获得有关在我分发给用户的版本中遇到异常的位置的更多信息?

C# WPF 异常 日志记录 调试信息

评论

0赞 LittleBit 10/23/2023
StackTrace应该包含您正在寻找的信息。learn.microsoft.com/en-us/dotnet/api/......StackFrames

答:

0赞 ThomasArdal 10/24/2023 #1

这可能是因为在为最终用户生成应用程序时,您是在发布配置中生成项目。这样做时,代码会被优化,文件名和行号等信息将被省略。

如果要包含此信息,则需要将文件部署为应用程序的一部分。更多信息请见:https://docs.elmah.io/include-filename-and-line-number-in-stacktraces/.pdb