标签: assert

是否可以在Delphi中添加"assert"作为关键字?

我在代码中写了几个"assert(...)",以确保满足前置条件和后置条件.我们可以告诉Delphi编译器,是否在调试版本中使用断言进行编译,而在发布版本中没有断言.

我想知道,如果有可能,像其他Pascal关键字一样突出"断言"?

ide delphi assert keyword

2
推荐指数
1
解决办法
692
查看次数

测试方法会抛出特定的异常.NET

如何测试void方法在.NET中引发特定异常.

我有一个方法,根据输入抛出3种不同类型的异常.我如何测试我每次都获得当前的一个,并且还测试它在通过正确输入时不会抛出任何内容.

谢谢!

unit-testing assert mstest exception-handling

2
推荐指数
1
解决办法
773
查看次数

C++ assert()在没有给出任何错误消息或失败的行的情况下失败

我的代码中有一个奇怪的问题.我有许多分散在代码周围的断言,一切都运行良好.每当断言失败时,我都会收到一条消息,告诉我故障发生的位置.今天我在一个加载文件的函数中写了另一个断言.只是想确保fie存在.一个非常简单的断言.这是相关代码:

//Check that the file exists and can be opened
FILE* f = fopen(filename, "rb");

#ifdef ASSERTIONS_ON
    assert(f!=NULL);//@problem For some reason while all other asserts work, this one just crashes the program without reporting line
#else
    if(f  == NULL)
        return MODEL_LOAD_FILENOTFOUND;
#endif

fclose(f);
Run Code Online (Sandbox Code Playgroud)

我知道这并没有多大帮助,只是想展示我的问题所在.我的操作系统是Windows 7.编译器是GCC.我从Windows获得的错误消息是通常的运行时错误但没有行报告:

"该应用程序已要求Runtime以不寻常的方式终止它.请联系应用程序的支持团队以获取更多信息"

可能是什么问题呢?什么可能导致断言失败只是请求终止而不报告它发生的行,而在相同的代码中的每个其他情况下它按预期工作?在此先感谢您的帮助!

c c++ assert

2
推荐指数
1
解决办法
470
查看次数

c#'string.Equals'返回错误的结果?

第一次海报,请原谅我,如果我的格式是关闭或任何东西:)

我正在使用XNA在C#中使用我的游戏引擎但是当我检查现有节点的新节点的名称时,即使列表中没有匹配的名称,Assert也会无法预测地触发.这是我所指的代码:

    public void CheckNameIsUnique(string cName)
    {
        for (int i = 0; i < m_aNodeList.Count; ++i)
        {
            Debug.Assert(m_aNodeList[i].GetName().Equals(cName),
                "USE OF NON-UNIQUE NAME: " + cName);
        }
    }
Run Code Online (Sandbox Code Playgroud)

断言将触发 - 例如 - 在检查时,"box1"并且列表中唯一的节点具有名称"RootNode".

我使用以下方法获得了相同的不可预测的结果: string == stringstring.CompareTo(string) > 0

有任何想法吗?= \

c# assert

2
推荐指数
1
解决办法
390
查看次数

断言()在php 5.3.1中显示警告

我使用的是sphinx 0.9.8版本.我的php版本是5.3.1.在集成sphinx api后,我收到一些关于assert()的警告.我该如何解决这个问题?任何人都可以帮助我?

谢谢

php warnings assert sphinx

2
推荐指数
1
解决办法
2202
查看次数

Python的最佳实践:assert command()== False

我想知道什么是更好/更好:

>>> def command():
...     return False
...
>>> assert command() == False
>>> assert command() is False
>>> assert not command()
Run Code Online (Sandbox Code Playgroud)

干杯,马库斯

python unit-testing assert

2
推荐指数
2
解决办法
4730
查看次数

断言断言的核心

嗨,当我尝试在程序中使用assert函数时,它会转储代码。谁能告诉我我的代码有什么问题。

#include <stdio.h>
#include <assert.h>
void print_number(int myConfig) {
    assert (myConfig > 20);
    printf("\nConfig value is : %d",myConfig);
}

int main ()
{
int configArr[]={21,27,15};
for(int i=0;i<=2;i++)
  print_number (configArr[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

配置值是:21
配置值是:27断言失败:myConfig> 20,文件assert.cpp,第4行
中止(核心已转储)

c assert coredump

2
推荐指数
1
解决办法
6607
查看次数

C:从生产代码中删除断言

在我正在研究的一个项目中,用C89编写,assert()当一些预先定义的假设不成立时,我使用语句作为代码在我的开发机器上失败的一种方式.但是,代码还包含一些错误处理代码,以便程序不会因生产环境中的断言失败而崩溃.

该项目使用GNU Autotools编译和分发源代码分发.

现在,我的问题是如何确保运行make dist将从我的代码中删除所有断言,然后生成分发tarball?

c assert production-environment

2
推荐指数
1
解决办法
846
查看次数

为什么这段代码行为不一致?

我正在尝试实现CS107 - Programming Paradigms(斯坦福大学的在线课程)中讲座5和6中所示的通用堆栈.下面的代码,代表演讲中提供的一个示例,编译,但似乎并不表现一致,因为我经常得到一个断言失败.

我注意到了Geany和gcc($ gcc --version gcc (Debian 6.3.0-18) 6.3.0 20170516)中的行为,但没有注意到` https://www.tutorialspoint.com/compile_c_online.php '所以我想知道它是由gcc中的某些东西引起的还是我看起来不是什么bug现在看.

码:

#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include <assert.h>

typedef struct {
    void *elems;
    int elemSize;
    int logLen;
    int allocLen;

} stack;

void StackNew(stack *s, int elemSize);
void StackDispose(stack *s);
void StackPush(stack *s, void *elemAddr);
void StackPop(stack *s, void * elemAddr);

void StackNew(stack *s, int elemSize)
{
        assert(s->elemSize > 0);
        s->elemSize = elemSize;
        s->logLen = 0;
        s->allocLen = 4;
        s->elems = malloc(4 * elemSize);
        assert(s->elems != NULL); …
Run Code Online (Sandbox Code Playgroud)

c gcc assert

2
推荐指数
1
解决办法
100
查看次数

在C / C ++中断言(false)的更好替代方法

目前,我写

assert(false);
Run Code Online (Sandbox Code Playgroud)

在我的代码永远无法到达的地方。一个非常C风格的示例是:

int findzero( int length, int * array ) {
  for( int i = 0; i < length; i++ )
    if( array[i] == 0 )
      return i;
  assert(false);
}
Run Code Online (Sandbox Code Playgroud)

一旦达到assert(false),我的编译器就会意识到程序已完成。但是,每当出于性能原因使用-DNDEBUG进行编译时,最后一个断言都会消失,并且编译器会警告执行将在没有return语句的情况下完成该函数。

如果已经达到了代码的一个所谓的无法到达的部分,那么完成程序的更好的替代方法是什么?解决方案应该

  • 被编译器识别并且不产生警告(如上述警告或其他警告)
  • 甚至允许自定义错误消息。

无论是现代C ++还是90s C,我都对解决方案特别感兴趣。

c c++ debugging assert

2
推荐指数
3
解决办法
244
查看次数