如何正确处理"断言失败"信息

时间:2017-04-19 17:48:26

标签: c# debugging assertions assertion nanomsg

我使用nanomsg在多个组件之间发送/接收数据。有时当我将一些数据发布到另一个组件时,我收到一个错误:

  

"断言失败:......"。

我对Assertion不太熟悉(这是我第一次遇到它们)。

如何正确处理断言?

在开发期间和发布的Debug版本中发生了这种情况。使用Debug构建,可执行文件崩溃。

无论如何干净利落地处理这个问题?

发布版本会发生这种情况吗?

这种情况很少发生 - 我发现它每70次发布尝试就会发生一次,因此重新制作和测试并不容易。

1 个答案:

答案 0 :(得分:1)

定义:

  

assert( int anIntValueTestedAndAbortCalledIfNonZERO )

   This can help programmers find bugs in their programs, or
   handle exceptional cases via a crash that will produce limited
   debugging output.

   If expression is false (i.e., compares equal to zero), assert()
   prints an error message to standard error and terminates the program
   by calling abort(3).  The error message includes the name of the file
   and function containing the assert() call, the source code line
   number of the call, and the text of the argument; something like:

用例:

故意 abort() -s帮助调试算法化以正确满足&处理处理上下文中的所有可能值。

assert(   length > 0
      && "DEBUG: [length] must be positive"
          );                               /* PREVENTS ANY CALL
                                              WITH A DECLARED
                                              NEGATIVE SIZE
                                              FOR A BUFFERED STRING
                                              TO PROCEED & CRASH THE IO-DATAPUMP
                                              #3588502 / QA-CLOSED
                                              */

因此 - 是的,它可能在生产发布中以便仍然有用(安全保险丝)。取决于版本发布QA流程中使用的DEBUG宏和选项的编译。

同样的做法不仅在模块/库中,而且在用户程序(应用程序开发)中也很常见,其中许多语言支持这种行为的显式语法,用于相同的目的(安全保险丝)。实际语法规则可能因语言而异。

处理?那么,用户程序不会&#34;处理&#34; 断言,但应用程序设计人员有责任满足API假设条件(如< strong> DIV!0 〜one不应该除以零,因此尝试这样做将合法abort() - ed,因为此类调用违反了(假设的)规则。)