- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在阅读了一些关于滥用异常的线程后(基本上是说如果函数前提条件不正确你不想展开堆栈 - 可能表示你所有的内存都已损坏或同样危险的东西)我正在考虑使用断言() 更频繁。以前我只使用 assert() 作为调试工具,我认为这就是很多 C++ 程序员使用它的方式。我担心我的部分错误处理会被 NDEBUG #define 在未来某个时候引入运行时构建而关闭。有没有办法解决这个问题,其他人对此有疑问(即我应该担心它)吗?
谢谢,帕特
编辑:我正在阅读的线程的要点是,如果您的应用程序确实存在问题,那么展开堆栈可能会损坏系统,例如,如果析构函数向文件写入内容并且文件句柄已损坏。我并不是建议使用 assert 进行正常的错误处理。我当前的用例非常薄弱,但看看您的想法:
//check later code won't crash the system
if( buf.length() % 2 )
return false;
// do other stuff that shouldn't affect bufs length
//copy 2 bytes into buf at a time, if length is odd then don't know
//what will happen so use assert to make sure it can't damage anything
assert( !(buf.length() % 2) );
for( i = 0; i != buf.length(); i += 2 )
memcpy( buf + i, data, 2 );
edit2:讨论在这里: http://groups.google.com/group/comp.lang.c++.moderated/browse_frm/thread/80083ac31a1188da
最佳答案
您可以构建自己的断言,而不是使用常用的 C assert.h。您的断言不会被禁用。
查看 assert() 是如何在/usr/include/assert.h(或其他地方)中实现的。这只是一些预处理器魔法,最终调用“断言失败”函数。
在我们的嵌入式环境中,我们一直在替换 assert()。
关于c++ - 断言和 NDEBUG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/389180/
安装并修复我的 VS2015 实例后,我仍然无法让智能感知(服务器端)在我的 MVC View 中工作。当我在 session 中第一次打开 .cshtml 文件并找到 Activitylog 文件时
我是一名优秀的程序员,十分优秀!