草庐IT

BeanShell断言

全部标签

c++ - 当 QObject::connect() 失败时,您能否导致 Qt 断言、段错误或以其他方式崩溃?

我正在使用Qt4.8.x,所以我无法从Qt5访问新的connect接口(interface),但我想在信号/插槽连接失败时收到更好的警报,因为我拼错了信号或插槽名称。目前,Qt所做的只是在尝试连接时吐出一条错误消息。但是,我的程序在stdout上有很多输出,因此有时很容易错过这些错误。当连接语句失败时,是否可以通过断言、段错误或其他方法强制我的应用程序崩溃? 最佳答案 是:将QT_FATAL_WARNINGS环境变量设置为非零值。您可以在QtCreator的开发过程中执行此操作,方法是转到“项目”Pane,单击“运行”,然后在“运行

c++ - 你能写一个静态断言来验证数据成员的偏移量吗?

给定以下结构:structExampleStruct{charfirstMember[8];uint64_tsecondMember;};有没有办法编写静态断言来验证secondMember的偏移量是8字节的某个倍数? 最佳答案 偏移量可以使用cstddef库自带的offsetof宏。在这里我首先得到偏移量,然后我使用modulusoperator检查它是否是8的倍数。然后,如果余数为0,则偏移量确实是8字节的倍数。//Offset.cpp#include#include#include#includestructExampleSt

c++ - boost::mutex::~mutex(): 断言 `!pthread_mutex_destroy(&m)' 失败

我在互斥锁析构函数中遇到了上述错误。由于错误可能是由于互斥锁在销毁过程中处于锁定状态,所以我创建了一个新的互斥锁类,它继承自boost:mutex。这是为了确保互斥锁在销毁期间解锁。但是,仍然会出现相同的错误。任何命中将不胜感激!classCMutes:publicboost::mutex{public:CMutes(){};virtual~CMutes(){if(m_bLock)boost::mutex::unlock();};voidlock(){if(!m_bLock)boost::mutex::lock();elsecout编辑:是的你是对的。我应该使用RAII。但是,我处于一

c++ - 在 Windows 上使用 gdb 调试 MinGW 程序,而不是在断言失败时终止

如何在window上设置gdb,使其不允许断言失败的程序终止?我打算检查程序中的堆栈跟踪和变量。例如,在gdb中运行使用MinGW'g++-gtest.cpp-otest'编译的test.cpp程序:#includeintmain(intargc,char**argv){assert(1==2);return0;}给予:$gdbtest.exeGNUgdb6.8Copyright(C)2008FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochang

c++ - 捕获所有类型的断言

我需要这样的条件:try{//bugcondition}catch(){//Removefile}那是我创建了一个非常secret的文件,其中的数据不能被第三方查看,但是当代码中出现任何错误时,我的文件就会被删除,因为我不知道错误发生的确切位置。所以我想使用try和catch捕获该错误并删除该文件。我怎样才能在C++中捕获任何异常??如果有错误,这将删除文件。喜欢:try{charTempArray[10];charc=TempArray[11];}catch{cout 最佳答案 关于安全的一句话:如果你在硬盘上创建了一个包含sec

c++ - 如何静态断言 std::array 成员的大小

我想明确说明成员变量的数组大小限制,以防止其他人意外做出愚蠢的更改。以下幼稚的尝试将无法编译:structFoo{std::arraysome_array;static_assert((some_array.size()%256)==0,"Sizemustbemultipleof256");//^(clang)error:invaliduseofnon-staticdatamember'some_array'};即使std::array::size是一个constexpr,我也不能像那样直接使用static_assert因为函数都不是我的成员变量也不是静态的。我想到的解决方案是使用de

c++ - 调试断言失败!表达式 : _BLOCK_TYPE_IS_VALID

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭10年前。我收到此错误消息:DebugAssertionFailed!Expression:_BLOCK_TYPE_US_VALID(pHead->nBlockUse)在尝试执行以下操作时#include#includeusingnamespacestd;classNN{public:NN(constintnumLayers,constint*lSz,consti

c++ - 在哪里放置断言?

对意外情况进行断言被认为是良好的防御性编码实践。每当我认为可能会发生意想不到的事情时,我都会碰巧下断言,但现在这对我来说似乎有点矫枉过正。此外,有时不一定导致崩溃的轻微意外情况甚至可能导致客户端故障。是否有严格的断言规则?谢谢。 最佳答案 何时使用断言和异常的主要区别:使用断言来捕获编程错误。如果代码编写正确,断言就永远不会发生。使用异常来捕获由意外环境引起的运行时错误。如果您的程序从文件中读取脚本或内容,但它们与预期格式不匹配,我认为这是运行时条件,因此属于异常。出于调试目的,您可能决定在抛出异常的地方使用断言,以便能够更容易地找

c++ - 如何检测和断言特定类的虚拟继承?

我有一个实现引用计数的C++类,我希望该类的所有用户仅虚拟地继承该类,以便没有对象最终具有多个引用计数器。我想要某种方式在编译时或至少在运行时断言此要求。有什么办法可以实现吗? 最佳答案 是这样的吗?structRefCounter{templateRefCounter(T*){BOOST_STATIC_ASSERT(boost::is_virtual_base_of);}};structGoodClass:virtualRefCounter{GoodClass():RefCounter(this){}};structBadClas

c++ - 调试断言失败。 C++ vector 下标超出范围

以下代码在第一个for循环中用10个值填充vector。在第二个for循环中,我希望打印vector的元素。输出到第j循环前的cout语句。给出vector下标超出范围的错误。#include"stdafx.h"#include"iostream"#include"vector"usingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){vectorv;cout0;--j){cout 最佳答案 无论您如何索引推回,您的vector都包含从0索引的10个元素(0、1、...、9)。所以在你的第