Tag: 线程exception

如何通过Exception getCause()循环查找详细消息的根本原因

我正在尝试在hibernate中调用saveOrUpdate()来保存数据。 由于列具有唯一索引,所以当我通过Eclipsedebugging器查看时,它会抛出ConstraintViolationException 。 由于在向表中插入数据时,根源可能会因不同的例外而有所不同。 我想知道,如何循环/遍历getCause()来检查exception及其消息的根本原因。 更新: 感谢大家的友善回应,事情是我想输出像下面的图像: 我需要访问detailMessage字段。 (我真的很抱歉如果不能让我的问题更清楚。) 谢谢。

为什么编译器检查C ++中的exception?

C ++提供了检查exception的语法,例如: void G() throw(Exception); void f() throw(); 但是,Visual C ++编译器不检查它们; 抛标志简单地被忽略。 在我看来,这使得exceptionfunction无法使用。 所以我的问题是: 有没有办法让编译器检查exception是否正确捕获/ rethrown? 例如一个Visual C ++插件或一个不同的C ++编译器。 PS。 我希望编译器检查exception是否被正确捕捉,否则最终会出现这样的情况: 即使明确声明不会抛出任何东西 ,也不得不绕过每个函数调用。 更新:当使用throw()标记函数时,Visual C ++编译器会显示警告。 这很好,但遗憾的是,当你调用一个可能抛出的子程序时,这个警告不会显示出来。 例如: void f() throw(int) { throw int(13); } void h() throw() { g(); } //no warning here!

C ++,__try和try / catch / finally

我想知道一些关于C ++ try / catch / finally块。 我已经看到这些命令有两个下划线像__try。 但MVSC 2010项目也运行没有下划线。 那么你什么时候需要这些下划线?

为什么我在asp.net中得到“线程被中止”?

我不知道为什么发生这种情况,我从来没有明确地放弃线程,所以有点意外。 但是,我loggingexception,我看到: System.Threading.ThreadAbortException – 线程被中止。 它似乎发生在调用System.Threading.WaitHandle.WaitOne 。 我不知道这个例外有多远。 我不认为我的线程终止,因为我抓住日志并吞下错误。 有谁知道我为什么得到这些错误? 也许是当我强迫终止我的服务器或要求重启? 如果不是那么可能导致他们?

如果例外情况是案例类?

我的自定义exceptiontypes应该是case class ? 好的一面,我得到提取器。 在负面,我得到不正确的平等语义。 但是我可以通过压倒equals来避免这种情况。 那么在概念层面上,让它们成为case class是有意义的吗?

我有时可以下沉我的例外吗?

我有一个最佳实践问题。 我意识到这是主观的,但是如果这是一个常见的编程习惯,我想问问比我聪明的人。 如果你有一个非关键的方法,你不想干涉你的应用程序的重要function,这是常见的使用这样的错误汇? Try 'do stuff. not important if it fails. Catch ex as exception 'sink. do nothing. End Try 如果你想雇用我,而你正在阅读我的一些代码,看到这个…你会吗? 赛斯 编辑哇! 感谢您的回答。 我认为共识是永远不应该做,或者应该是非常罕见的。 我想我会给你这个问题的背景。 首先,我对Karl Sequin的文章非常熟悉,并且多年来一直遵循这种模式。 但今天在我正在进行的这个项目上,我正在通过更改列表,面对增加了一个简单的function。 (如果你想知道…它将添加上下文菜单支持一个富文本框。) 附注说:“如果需要15分钟以上的时间,请把它放下。” 所以我面临增加什么是一个潜在的有用的function,但没有真正有时间来testing,它不会打破工作function。 为了logging,这个系统的exception处理程序有一个处理和下沉或logging这些错误的机制。 但是如果我正在研究一个没有健壮的error handling系统的系统呢。 添加这个function是否可以,如果发生错误,什么都不会丢失。 那是我的想法。 但是我把你的信息放在心上……基本上这是一个坏主意。 赛斯

为什么必须把一个完整的代码块放在lambda体中呢?

如果在lambda函数中有一个单独的语句,我们可以省略为它定义完整的代码块: new Thread(() -> System.out.println()); 为什么不是那种抛出exception的语句呢? 这产生了编译错误,指出'{' expected : new Thread(() -> throw new RuntimeException()); 当然,在一个代码块中封装lambda体是可行的: new Thread(() -> { throw new RuntimeException(); });

新(std :: nothrow)与try / catch块中的New

我在学习new之后做了一些研究,与我习惯的malloc()不一样,不会因为失败的分配而返回NULL,并且发现有两种不同的方法来检查new是否成功。 这两种方法是: try { ptr = new int[1024]; } catch(std::bad_alloc& exc) { assert(); }; 和 ptr = new (std::nothrow) int[1024]; if(ptr == NULL) assert(); 我相信这两种方式能达到同样的目的(如果我错了,就纠正我),所以我的问题是: 这是检查new成功的更好select,完全基于可读性,可维护性和性能,而忽视事实上的c ++编程约定。

SemaphoreFullException通过ASP.NET成员资格检查用户angular色时

我有一个页面,在执行某个任务之前检查用户是否处于特定angular色,并且对function没有任何问题,并且没有对所涉及的代码进行明显的相关更改。 该站点位于运行IIS 7.0的开发计算机(Windows Vista)上,数据库在单独的服务器上是MS SQL 2005。 突然,所有对User.IsInRole调用都会导致 System.Threading.SemaphoreFullException:将指定的计数添加到信号量将导致它超过其最大数量。 我确定重新启动IIS将“解决”这个问题,但我想了解是什么导致了它,所以我可以确保它不会发生在我的生产站点。 堆栈跟踪的顶部是: [SemaphoreFullException:将指定的计数添加到信号量将导致它超过其最大计数。] System.Threading.Semaphore.Release(Int32 releaseCount)+6065293 System.Data.ProviderBase.DbConnectionPool.PutNewObject(DbConnectionInternal obj)+57 System。 Data.ProviderBase.DbConnectionPool.DeactivateObject(DbConnectionInternal obj)+338 System.Data.ProviderBase.DbConnectionPool.PutObject(DbConnectionInternal obj,Object owningObject)+163 System.Data.ProviderBase.DbConnectionInternal.CloseConnection(DbConnection owningObject,DbConnectionFactory connectionFactory)+117 System .Data.SqlClient.SqlInternalConnection.CloseConnection(DbConnection owningObject,DbConnectionFactory connectionFactory)+37 System.Data.SqlClient.SqlConnection.Close()+158 System.Web.DataAccess.SqlConnectionHolder.Close()+25 System.Web.Security.SqlRoleProvider .GetRolesForUser(string用户名)+847 System.Web.Security.RolePrincipal.IsInRole(stringangular色)+182

输出救援中的错误(Ruby / Rails)

只是一个简单的问题。 我无法在文档中find它。 如果我使用标准的begin … rescue ,我如何打印所有错误或堆栈跟踪到救援? 例如: begin do x rescue puts errors end 有任何想法吗?