Articles of 未处理exception

终止recursion调用

据我所知,当exception处理出现问题时(通常它没有被捕获), terminate()被调用。 我得到的只是一个terminate called recursively错误行terminate called recursively 。 谷歌search一段时间后,我发现了很多的例子 terminate called after throwing an instance of … terminate called recursively 但是这不是我的情况。 因为我没有关于这个exceptiontypes的提示,所以我想知道这个terminate called recursively意味着什么。 对不起,我不能提供代码,所以任何猜测都会有帮助。 我在Ubuntu 11.04下用g ++ 4.5.2编译。 亚历克斯,谢谢。

在C ++中创build新的exception

我有一个C ++类,我试图在Ubuntu中运行它: #ifndef WRONGPARAMETEREXCEPTION_H_ #define WRONGPARAMETEREXCEPTION_H_ #include <iostream> #include <exception> #include <string> using namespace std; #pragma once class WrongParameterException: public exception { public: WrongParameterException(char* message): exception(message) {}; virtual ~WrongParameterException() throw() {}; }; #endif 当我尝试编译它时,编译器给我这个错误: WrongParameterException.h: In constructor 'WrongParameterException::WrongParameterException(char*)': WrongParameterException.h:14: error: no matching function for call to 'std::exception::exception(char*&)' /usr/include/c++/4.3/exception:59: note: candidates are: std::exception::exception() /usr/include/c++/4.3/exception:57: note: std::exception::exception(const […]

g ++中的共享C ++库之间的例外

据我所知,在C ++ STD中没有定义(未定义的行为),编译的应用程序应该如何处理当一个共享库在另外一个共享库内引发exception的情况[共享库]。 G ++ / Linux生成的代码表明可以在共享库之间引发exception。 我的问题是: 它是否便携式(MSVS)? 在这种情况下,共享库A将无法处理来自共享库B的exception? [我的意思是应用程序会崩溃; 图书馆A知道可能的例外来自B ]。 我的例子中的exception处理行为是否依赖于链接器?

在cmd中解决外部exception –

我有一个使用cmd运行EXE文件的方法。 这个EXE文件在初始化,然后在我的系统上重试和启动一个进程的时候会得到一个exception。 我不能编辑EXE文件来改变它的行为。 当运行代码后,exception之后,命令行窗口立即closures。 我怎样才能保持cmd窗口打开,直到重试? 谢谢,Tal。 public void RunJob(Process cmdProcess) { cmdProcess.StartInfo.FileName = "cmd.exe"; cmdProcess.StartInfo.UseShellExecute = false; cmdProcess.StartInfo.CreateNoWindow = true; cmdProcess.StartInfo.RedirectStandardOutput = true; cmdProcess.OutputDataReceived += new DataReceivedEventHandler(form.SortOutputHandler); cmdProcess.StartInfo.RedirectStandardError = true; cmdProcess.ErrorDataReceived += new DataReceivedEventHandler(form.SortOutputHandler); cmdProcess.StartInfo.RedirectStandardInput = true; cmdProcess.StartInfo.Arguments = string.Format("/k cd \"{0}\\BinFolder\"", form.txtLocalRepo); cmdProcess.StartInfo.Verb = "runas"; cmdProcess.Start(); StreamWriter cmdStreamWriter = cmdProcess.StandardInput; cmdProcess.BeginOutputReadLine(); cmdStreamWriter.WriteLine("START testing.exe"); }

Ruby,windows,active_record和Control-C

什么是active_record做的窗口下的信号进程(我没有看到这与mac上相同的版本),导致它performance如此奇怪? 例如: require 'rubygems' trap("INT"){puts "interrupted"} puts __LINE__ sleep 5 require 'active_record' trap("INT"){puts "interrupted again"} puts __LINE__ sleep 5 当我运行上面的代码(ruby 1.8.6,gem 1.3.1,activerecord 2.2.2)时,我可以在第一次睡眠的时候按照我喜欢的次数碰到^ C,但是activerecord要求之后的第一个中断会导致脚本终止。 在上述情况下,陷阱仍然执行,它只是不允许程序继续。 通常。 删除第二个陷阱电话对行为没有任何影响。 真正的烦恼是,在某些情况下,陷阱根本没有执行。 考虑到这样做的整个目的是让我的代码自己清理(删除其在数据库中的足迹,所以下一个家伙看到一个理智的状态),这是一个真正的问题。 例如: require 'rubygems' require 'active_record' trap("INT"){puts "interrupted"} puts __LINE__ gets 看到投注后按^ C将根本不执行陷阱。 我只看到这个问题后需要active_record。 有没有解决方法? 我很想知道这是一个错误,还是有某种解释。 正如我所说的,我没有任何问题在这个重复的CS结果陷阱过程的多次执行。 谢谢…

C ++崩溃转储,在Win32exception(使用catch(…)时)的堆栈展开 – VS 2003

像Just In Timedebugging一样,VS 2003编译的应用程序是否捕获到catch(…)中的Win32(或asynchronous)exception,并展开堆栈? 转储文件写入之前…

获取有关结构化exception的详细信息

我的Visual C ++应用程序使用/ EHA选项编译,让我捕捉结构化的exception(除以零,访问冲突等)。 然后,我使用_set_se_translator()将这些exception转换为我自己的exception类。 我的目标是改进我们对这些types例外的logging。 我可以从EXCEPTION_RECORD结构中获取exception的types,以及exception地址。 我希望能够收集更多的信息,如抛出exception的源文件/位置,调用堆栈等。这可能吗? 我在结构化exception上创build了一个exception小型转储 – 是否有一个工具来自动获取调用堆栈?

显示可变消息的自定义exception,不同编译器中的不同行为

我最近在做一些套接字编程,并开始用C ++编写代码。 由于我正在编写的程序将有几个组件必须通过套接字进行通信,所以我决定在一个类中封装套接字通信。 由于有几个可能发生的错误,我决定为套接字exception创build一个类,我这样定义它: class SocketException: public std::exception { public: SocketException(const std::string &message); ~SocketException() throw(); virtual const char * what() const throw(); private: std::string msg; }; 实施情况如下: SocketException::SocketException(const std::string &message) : msg(message) {} SocketException::~SocketException() throw() {} const char * SocketException::what() const throw() { std::stringstream stream; stream << msg + " Error number: "; stream << […]

崩溃转储中的exception

我从Windows可执行文件(一个在WinDbg中打开的.DMP文件)中有一个崩溃转储。 虽然我可以阅读堆栈,解释一些寄存器,并检查堆内存,我怀疑这里也有一个未处理的exception。 内存中有什么exception“看起来像”? 它是在寄存器中确定的值,还是在某种状态下的堆栈? 我如何find并解释它?

如何断言一个exception没有被提出?

我在我的应用程序中使用Visual Studio 2013中的unit testingfunction。 我正在尝试编写一个类的testing,您将特定的对象传递给构造函数,根据传递的对象的状态,可能会引发exception。 我为每个对象状态写了存根,并为构造函数将引发exception的场景编写testing用例,如下所示: TEST_METHOD(constructor_ExceptionRaised) { // arrange const InvalidStub stub; // act auto act = [stub] { const Foo foo(stub); }; // assert Microsoft::VisualStudio::CppUnitTestFramework::Assert::ExpectException <MyException>(act); } 我应该如何处理一个场景,我想传递一个有效的存根,只是断言没有例外被提出? 我想纯粹关心一个特定的MyException不被抛出(而不是任何exception)。 我一起砍了一个testing方法如下,但不知道是否有一个简单的“1线”方法可以满足我的需求: TEST_METHOD(constructor_NoException) { // arrange const ValidStub stub; try { // act const Foo foo(stub); } // assert catch (MyException e) { Microsoft::VisualStudio::CppUnitTestFramework::Assert::Fail(); } […]