草庐IT

catching

全部标签

c++ - 获取有关 catch block 内何处抛出 C++ 异常的信息?

我有一个C++应用程序,它将大部分代码包装在tryblock中。当我捕捉到异常时,我可以将用户返回到稳定状态,这很好。但我不再收到故障转储。我真的很想弄清楚异常发生在代码中的什么位置,这样我就可以记录并修复它。能够在不停止应用程序的情况下进行转储是最理想的,但我不确定这是否可能。有什么方法可以找出异常从catchblock中抛出的位置吗?如果它有用,我在windowsxp和更高版本上使用nativemsvc++。我的计划是简单地将崩溃记录到各个用户计算机上的文件中,然后在崩溃日志达到一定大小后上传。 最佳答案 这可以通过使用SEH(

c++ - 在 try catch block 中断言

我目前正在对一段代码添加处理以使其不会崩溃。目前它有每个步骤,然后是一个ASSERT语句,以确保上一步没有出错。如果这些步骤中的某个步骤出了问题,那确实是出了大问题。该程序应该停止。虽然在Release模式下程序遇到断言,但愉快地继续运行并崩溃。为了解决这个问题,我将方法包装在一个try/catchblock中,并在断言所在的位置抛出错误。这应该捕获我们跟踪的所有错误和我们没有跟踪的其他错误。现在我的问题是,我是否仍应使用断言来通知程序员这不应该发生?或者现在将它们取出,因为它不会因为catchblock(我清理对象的地方)而崩溃?或者我应该只在catchblock中抛出一个断言,而不

C++11 在不使用 try/catch block 的情况下安全地加入线程

根据文档here和here,如果joinable()==false,C++11线程的join方法将抛出std::system_error。因此,等待线程完成执行的自然方式是:if(thread2.joinable())thread2.join();但是,这有可能抛出std::system_error。考虑线程1调用thread2.joinable(),返回true,说明thread2还在运行。然后调度程序暂停线程1并将上下文切换到线程2。线程2完成,然后线程1恢复。线程1调用thread2.join(),但线程2已经完成,因此抛出std::system_error。一个可能的解决方案是

java - catch block 在 C++ native 库中不起作用

我正在用C++编写一个Javanative库,并在native库本身中使用异常处理,但是一旦我抛出异常,库就会崩溃。这是我的简单测试程序,当我从Java测试中调用它时,它会在抛出异常时立即崩溃。catchblock不工作。任何想法我错过了什么。谢谢。#include"Test.h"#includeJNIEXPORTvoidJNICALLJava_Test_helloWorld(JNIEnv*,jobject){std::cout编译和链接:g++-m64-fPIC-fexceptions-ctest.cppg++-shared-m64-Wl,-soname,libtest.so-Wl,

c++ - 使用 CATCH C++ 单元测试框架测试两个 std::vectors 是否相等

我是CATCH的新手,我想知道如何测试两个std::vectors是否相等。我非常天真的尝试是这样的:#defineCATCH_CONFIG_MAIN#include"catch.hpp"#includeTEST_CASE("arevectorsequal","vectors"){std::vectorvec_1={1,2,3};std::vectorvec_2={1,2,3};REQUIRE(vec_1.size()==vec_2.size());for(inti=0;i有更好的方法吗?像魔法一样的东西REQUIRE_VECTOR_EQUAL?此外,如果一个数组包含double{1.

c++ - 我如何使用 try...catch 来捕获浮点错误?

我在visualstudioexpress中使用c++生成随机表达式树,用于遗传算法类型的程序。因为它们是随机的,树经常产生:被零除、溢出、下溢以及返回“inf”和其他字符串。我可以为字符串编写处理程序,但文献让我对其他人感到困惑。如果我理解正确,我必须先设置一些标志?建议和/或指向一些文献的指针将不胜感激。编辑:double变量中返回的值为1.#INF或-1.#IND。我把它们称为字符串是错误的。 最佳答案 根据http://msdn.microsoft.com/en-us/library/aa289157%28v=vs.71%2

c++ - 如果我尝试在 C++ 中的 catch block 中抛出一些东西,为什么会导致终止

我有以下C++代码,它给了我一个惊喜。问题是,如果我在catchblock中抛出除了重新抛出之外的东西,程序将通过调用abort终止并在GCC4中给出错误消息,“在抛出'int'实例后调用终止”。如果我只使用“抛出;”重新扔进catchblock,一切都会好起来的。#include#include#includeusingnamespacestd;intmain(){try{throwstd::string("firstthrow");}catch(std::string&x){try{std::cout 最佳答案 如果你抛出一个i

c++ - 如何在一个 catch block 中捕获所有类型的异常?

在C++中,我尝试一次捕获所有类型的异常(如C#中的catch(Exception))。它是如何完成的?更重要的是,如何捕捉被零除异常? 最佳答案 catch(...){//Handleexceptionsnotcovered.}重要注意事项:更好的方法是捕获您实际上可以从中恢复的特定类型的异常,而不是捕获所有可能的异常。catch(...)还将捕获某些严重的系统级异常(因编译器而异),您将无法从中可靠地恢复。以这种方式捕获它们然后吞下它们并继续可能会导致您的程序出现进一步的严重问题。根据您的上下文,可以接受使用catch(...)

c++ - main() 函数中的 try\catch block 没有括号

VisualStudio2015;C++语言。我记得我在某处读到有关入口点(即main方法)的内容,可以这样写:#includeusingnamespacestd;intmain()try{return0;//Iamhere...}catch(...){cout即在这种情况下,try\catchblock不在括号中:intmain(){//startbrackettry{return0;}catch(...){return1;}}//endbracket这两种情况都已成功编译并且也可以正常工作,但是......在第一个变体中,当我在tryblock之后逐步按下F10键时,我也进入cat

php - PDO:是否需要 try-catch?

我收到了混合信号。PDOdocumentation中的警告似乎很清楚,省略try-catch可能会危及安全性。然而,thisthread表明这不是真的必要。在我看来,将每个查询都包装在try-catch中会很烦人。关于如何处理这个问题有什么建议吗? 最佳答案 有安全隐患,但不需要到处加try/catch。风险在于,如果您没有捕获异常,则异常的错误消息(可能包含敏感信息)可能会显示给用户。但正如文档所述,您可以改为添加exceptionhandler.通过重定向到一般错误消息,您可以避免向用户显示错误消息中的敏感信息。在任何情况下,设