如何让指定的程序崩溃
为了验证程序崩溃信息的收集和上报机制,需要让程序崩溃。为了达到这个目的,一般的做法是临时在程序中加入引发异常的代码。这种做法只在开发人员自己编译的版本中有效,在正式版本中无法进行验证。另外一种方法是加入一个隐藏开关,但这样会在正式版本中带上调试代码,也不理想。最好的方法是在不修改任何代码的前提下,也能够让程序崩溃。
为了验证程序崩溃信息的收集和上报机制,需要让程序崩溃。为了达到这个目的,一般的做法是临时在程序中加入引发异常的代码。这种做法只在开发人员自己编译的版本中有效,在正式版本中无法进行验证。另外一种方法是加入一个隐藏开关,但这样会在正式版本中带上调试代码,也不理想。最好的方法是在不修改任何代码的前提下,也能够让程序崩溃。
当程序崩溃的时候,捕获崩溃信息并进行上报对提升产品质量有很大帮助,它能发现很多在开发和测试阶段发现不了的问题。Windows的WER(Windows Error Reporting)组件在系统级别上提供了捕获崩溃信息的能力,它能够在程序崩溃时生成一个内存转储文件(即dump文件),该文件包含了引发崩溃的异常信息。然而,这个功能仅在Windows Vista SP1及更高的版本中存在,而且它是可配置的,用户可以阻止WER生成dump文件。这意味着我们不能依赖系统来捕获崩溃信息,而是要通过别的途径。
C++11新增的std::wstring_convert可以很方便地在std::string和std::wstring之间进行转换。例如,把一个std::wstring转换成以UTF-8编码的std::string:
假如你的程序需要在指定目录下生成一个唯一的临时文件,而且恰好引入了boost库,那么你可能会选择使用boost::filesystem::unique_path来生成文件名,因为该函数似乎正是为了此目的而生的。但是要小心,该函数在某些环境下可能会失败,抛出“拒绝访问”的异常。
在实际的编程工作中,经常需要对两个集合进行各种操作,例如取交集、取并集等。在C++中,完全不需要自己来实现这些操作,因为STL已经为我们准备好了这些常用的集合操作函数。
boost::asio::deadline_timer使用的计量时间是系统时间,因此修改系统时间会影响deadline_timer的行为。例如,调用了expires_from_now设置1分钟超时后,立刻把系统时间改成一天前,那么要过一天时间才会超时。这个特性可能会影响程序功能的正常使用,因此我们通常想要的是一个不会受系统时间影响的定时器。
使用MSVC编译以下代码会产生C4250警告:
boost::thread_specific_ptr用于定义线程局部变量,根据这个类的定义,当一个线程结束的时候,与之相关的变量都会被释放。然而,这个规则并不是在所有情况下都适用。在boost::thread_specific_ptr的文档中有这么一句话:
创建一个空的std::string对象有多种方式,常见的有以下两种:
对于有些程序来说,运行多个实例没有意义,甚至会出现异常,所以有必要把程序实现成单例。有多种方法可以做到这一点,比较好的方法是使用内核对象。