在Debug.Assert语句中插入行号

Ara*_*and 2 .net c# debugging

我们用来Debug.Assert向开发人员发出代码中的问题.我想添加错误发生的行号,但不是硬代码,因为这可能会改变,我们会忘记更新字符串.

添加错误的行号会很方便.有任何想法吗?

Chr*_*ich 9

默认情况下,Debug.Assert已包含堆栈跟踪信息:

当应用程序在用户界面模式下运行时,它会显示一个消息框,显示带有文件和行号的调用堆栈.

例:

替代文字

如果在断言对话框中没有看到文件名或行号,则PDB文件(作为编译的一部分生成)将丢失或无法访问.PDB文件包含文件和行调试信息.

在C#中没有真正等效的C/C++ __FILE____LINE__魔术宏,但如果您仍然希望在断言对话框之外使用此信息,则可以使用StackTrace该类来获取它.这要求您提供调试信息(上面提到的PDB文件).由于您可能正在使用它进行开发,因此这是一个安全的要求.

using System.Diagnostics;

namespace Managed
{
    class Program
    {
        static void Main(string[] args)
        {
            AssertWithCallSite(false, "Failed!");
        }

        [Conditional("DEBUG")]
        static void AssertWithCallSite(bool condition, string message)
        {
            if (!condition)
            {
                var callSite = (new StackTrace(1, true)).GetFrame(0);

                string fileName = callSite.GetFileName();
                int lineNumber = callSite.GetFileLineNumber();

                string assertMessage = string.Format(
                    "Assert at {0}:{1}:\n{2}",
                    fileName,
                    lineNumber,
                    message
                );

                Debug.Assert(false, assertMessage);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)