c# - C# 异常 - 使“源错误”成为调用方法的行
问题描述
在 C# 中,如果我调用一个固定方法(如 Regex.Replace)并引发异常,则错误消息会标记调用该方法的行,如下所示:
方法调用:
//
//
string str = Regex.Replace("Hello", null, "");
//
//
但是,如果我编写自己的方法(如 MyRegex.MyReplace)并引发异常,则错误消息会标记引发异常的行:
public static class MyRegex
{
public static string MyReplace(string input, string pattern, string replacement)
{
if (pattern == null)
{
throw new Exception("Pattern must not be null.");
}
else
{
return Regex.Replace(input, pattern, replacement);
}
}
}
方法调用:
//
//
string str = MyRegex.MyReplace("Hello", null, "");
//
//
如何在方法中抛出异常,并在调用方法的位置(如罐头方法)而不是抛出异常的位置标记错误消息?
解决方案
显示的行是调用堆栈中源代码可用的最低点。
你看不到里面的任何代码Regex.Replace
,所以它只显示你在代码中调用它的那一行。
但是因为throw new Exception()
是您的代码,所以它显示了。
如果您构建了一个 DLL 并在另一个项目中使用它(并且没有复制 .pdb 文件),那么它的行为方式与您的Regex.Replace
示例相同,因为新项目无法看到 DLL 中的源代码。
但是,如果您复制 .pdb 文件并在 DLL 的源代码所在的同一台计算机上运行新项目,那么 Visual Studio确实知道在哪里可以找到源代码,并且它仍然会向您显示 DLL 中的异常代码。(至少,我知道 Visual Studio 会那样做——我不确定 ASP.NET 是否会向浏览器显示)
推荐阅读
- kotlin - 如何在 Kotlin 中实现抽象类
- c - CP/M 获取运行程序名
- ios - Cocoapods 无法与远程 Artifactory 存储库一起使用
- android - MyFragment 开始新的意图,然后如果它关闭,它意图到 MyFragment
- swift - 使 @MainActor 类或演员符合 Codable
- c# - 无法将“System.String”类型的对象转换为“System.Byte []”类型的 ASP.NET Web 应用程序
- python - 直接使用win32库捕获ROI
- python - 如何以符号方式解决python中的差分方程
- typescript - Jest 需要 10 秒来运行两个琐碎的 TypeScript 测试,我如何确定它为什么很慢?
- browser-cache - 为什么 woff 缓存在 Chrome 中不起作用?