Tag: exception处理

如何获取所有局部变量的转储?

发生exception时,如何转储所有本地和会话变量? 我正在考虑编写某种基于reflection的函数,该函数将询问调用函数并创建变量和值的转储。 我可以使用现有的库吗? UPDATE 在与同事交谈后,我被指向AOP或面向方面编程。 这就是我的理解……使用AOP,可以简单地用某些属性修饰方法和类。 然后,AOP框架在这些类和方法中或周围注入代码。 有两种不同的框架,一种是注入代码然后编译程序集,另一种是简单地使用reflection和陷阱你已经装饰的调用,并在运行时包装方法周围的代码。 我希望所有这些都有意义。 我将对此进行更多研究并发布我的方法。 多谢你们 …

C#exception仅在调试时被捕获?

可能重复: 发布模式下的exception处理问题 我怀疑对此有一个非常简单的解释,但我似乎无法找到它。 当我的WinForms C#4.0应用程序在Program.cs文件中加载自身时,整个Main()函数内部都有一个try / catch语句。 我编写了一个小exception包装器,其行为与vanilla .net“未捕获exception”框非常相似,除了它提供了更多信息,允许保存(序列化)exception树,并允许用户提交错误直接向我汇报。 现在,它在调试时工作正常(F5)。 如果我在主线程中的程序中的任何地方触发exception,如果没有try / catch,则exception会一直触发到Main()并显示自定义窗口。 (我已经考虑过的所有其他例外情况并得到妥善处理)。 当我只运行.exe文件运行程序时,会出现vanilla .netexception框,而不是我编码的那个。 有什么理由可以想到为什么会发生这种情况? 最奇怪的是,它在调试模式下运行与自行运行时的行为完全不同。 我正在构建调试 – 而不是发布。 编辑(3月22日至11日): 我只是在这里添加一个小附录,以防你们中的一些人在下面接受的答案的评论中找不到答案:忘记我说我正在构建调试而不是发布。 这没有关系 – 我只是添加它以获取额外信息。 重要的是,当我在VS中调试ging时,exception会按预期被捕获,但是当在VS外部执行我的EXE时,它们不是。 正如Cody所说, Application.Run()有自己的exception处理程序,这就是为什么它们永远不会到达我的主要catch ,但是我提到我甚至没有在我的代码中的任何地方使用Application.Run()而是我的GUI首先使用Form.ShowDialog()启动。 我已经做了一些实验,并且可以确认Form.ShowDialog()与Application.Run()行为相同,因为exception是在方法本身内处理的。

WCF Web服务错误:“服务端点绑定不使用HTTP协议”?

我有一个简单的WCF服务,在我的开发机器上进行测试时工作正常。 现在我已将Web服务移动到Web服务器,并且我正在http://mydomain.com:8005上运行该服务(在调试模式下)。 打开Web浏览器到该URL显示预期的服务页面,如果我在我正在调用的接口内的服务器上放置一个断点,它会命中断点并返回预期的数据……但是在客户端它返回出现以下错误: 接收到http://mydomain.com:8005/的HTTP响应时发生错误。 这可能是由于服务端点绑定不使用HTTP协议。 这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭)。 请参阅服务器日志以获取更多详 更多线索:界面签名是: IEnumerable GetThings(out string errMsg); 其中MyClass定义为Serializable,客户端和服务器之间的定义相同。 有什么想法我需要翻转什么秘密开关?

有没有真正的世界理由使用throw ex?

在C#中, throw ex几乎总是错误的,因为它会重置堆栈跟踪。 我只是想知道,这有什么现实世界吗? 我能想到的唯一原因是隐藏封闭库的内部,但这是一个非常薄弱的​​原因。 除此之外,我从未在现实世界中遇到过。 编辑:我的意思是throw ex ,就像抛出完全相同的exception而被捕获但是有一个空的堆栈跟踪,就像完全错误一样。 我知道throw ex必须作为一个语言结构存在,以允许抛出一个不同的exception( throw new DifferentException(“ex as innerException”, ex) ),并且只是想知道是否有一个现场,其中一个throw ex没有错。

C#try-catch-else

从Python到C#的exception处理让我烦恼的一件事是,在C#中似乎没有任何指定else子句的方法。 例如,在Python中我可以写这样的东西(注意,这只是一个例子。我不是问什么是读取文件的最佳方法): try { reader = new StreamReader(path); } catch (Exception) { // Uh oh something went wrong with opening the file for reading } else { string line = reader.ReadLine(); char character = line[30]; } 从我在大多数C#代码中看到的,人们只会写下面的内容: try { reader = new StreamReader(path); string line = reader.ReadLine(); char character = line[30]; } catch (Exception) { […]

找不到适合指定文化或中性文化的资源

我创建了一个程序集,后来重命名了它。 然后我在调用时开始收到运行时错误: toolsMenuName = resourceManager.GetString(resourceName); resourceName变量在运行时是“enTools” 。 找不到适合指定文化或中性文化的资源。 确保在编译时将“Jfc.TFSAddIn.CommandBar.resources”正确嵌入或链接到程序集“Jfc.TFSAddIn”中,或者所有所需的附属程序集都是可加载和完全签名的。 代码: string resourceName; ResourceManager resourceManager = new ResourceManager(“Jfc.TFSAddIn.CommandBar”, Assembly.GetExecutingAssembly()); CultureInfo cultureInfo = new CultureInfo(_applicationObject.LocaleID); if(cultureInfo.TwoLetterISOLanguageName == “zh”) { CultureInfo parentCultureInfo = cultureInfo.Parent; resourceName = String.Concat(parentCultureInfo.Name, “Tools”); } else { resourceName = String.Concat(cultureInfo.TwoLetterISOLanguageName, “Tools”); } toolsMenuName = resourceManager.GetString(resourceName); // EXCEPTION IS HERE 我可以看到项目中包含的CommandBar.resx文件,我可以打开它并在那里看到“enTools”字符串。 似乎任何资源都不包含在程序集或资源中,但.NET无法解析名称。

尝试Catch或If语句?

如果你认为有可能获得空指针exception,你应该使用if语句来确保变量不为null,还是应该捕获exception? 我没有看到任何区别,因为您可以将您的逻辑用于处理if语句或catch块中的空指针,那么哪一个是最佳实践?

正确处理两个WebException

我正在尝试正确处理两个不同的WebException 。 基本上他们在调用WebClient.DownloadFile(string address, string fileName) 到目前为止,AFAIK有两个我要处理的,都是WebException的: 无法解析远程名称(即没有网络连接访问服务器下载文件) (404)文件不正确(即服务器上不存在该文件) 可能会有更多,但这是我迄今为止最重要的。 那么我应该如何正确处理它,因为它们都是WebException ,但我想以不同的方式处理上面的每个案例。 这是我到目前为止: try { using (var client = new WebClient()) { client.DownloadFile(“…”); } } catch(InvalidOperationException ioEx) { if (ioEx is WebException) { if (ioEx.Message.Contains(“404”) { //handle 404 } if (ioEx.Message.Contains(“remote name could not”) { //handle file doesn’t exist } } } 正如您所看到的,我正在检查消息以查看它是什么类型的WebException。 我会假设有更好或更精确的方法来做到这一点? 谢谢

Windows商店应用程序中是否存在全局exception处理程序?

对于未处理的exception,至少,我希望能够捕获详细信息并将其写入文件,以便进行后续的“调试取证”。 Windows商店应用程序中没有“OnTerminating”事件; 有没有合适的地方/方式来完成这样的? UPDATE 请参阅下面的评论。 这是一个不适合下面的补充: 即使在删除xaml片段时,我仍然得到那个错误的消息,甚至在清理和重建之后… ??? 2点击错误信息只需将我带到App.xaml的顶部,现在全部是: 更新2 关闭App.xaml并重建后,一切都很好…… ??? 哦,好吧 – 我想,一切都很顺利。 更新3 有趣的是,Windows Phone应用程序App.xaml.cs默认具有此处理程序: // Global handler for uncaught exceptions. UnhandledException += Application_UnhandledException; private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) { if (Debugger.IsAttached) { // An unhandled exception has occurred; break into the debugger Debugger.Break(); } }

抛出并捕获exception后继续执行代码

抛出exception后如何恢复代码执行? 例如,请使用以下代码: namespace ConsoleApplication1 { public class Test { public void s() { throw new NotSupportedException(); string @class = “” ; Console.WriteLine(@class); Console.ReadLine(); } } public class Program { public static void Main(string[] args) { try { new Test().s(); } catch (ArgumentException x) { } catch (Exception ex) { } } } } 在单步执行时捕获exception后,程序将停止运行。 我怎么还能继续执行? […]