我们用来Debug.Assert向开发人员发出代码中的问题.我想添加错误发生的行号,但不是硬代码,因为这可能会改变,我们会忘记更新字符串.
添加错误的行号会很方便.有任何想法吗?
默认情况下,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)