每日刷题(2015/6/23)You are given the source to an application which crashes when it is run.

You are given the source to an application which crashes when it is run. After running it ten times in a debugger, you find it never crashes in the same place. The application is single threaded, and uses only the C standard library. What programming errors could be causing this crash? How would you test each one?

译文:

有一个应用程序,运行起来后会崩溃,给你源代码,你在调试器中运行了10次, 发现10次崩溃的地方都不一样。程序是单线程的,只使用了C标准库。 试分析导致程序崩溃的原因可能是什么?你怎么去测试这些原因?


崩溃原因很大程度上取决于应用程序的类型。

尽可能给出以下原因:

  1. 随机的变量:应用程序使用了一些随机的变量或是数值, 由于每次执行这些数都不一样,导致崩溃的地方也不一样。比如:用户输入, 程序产生的随机数,当前系统时间等。
  2. 内存泄漏:由于内存泄漏导致程序最终将内存用尽而崩溃。 这个的随机性是由于程序运行时,系统中的进程数量不一样所导致的。 这也包含了堆的溢出或是栈中数据被破坏。
  3. 崩溃的原因还可能是由于程序依赖于其它应用程序或是外部模块所导致的。 比如应用程序依赖于系统的某些属性,而它们又被其它应用程序所修改, 那么就有可能导致程序的随机崩溃。与硬件交互得多的应用程序更可能产生这类错误。
web服务器崩溃的原因更可能是由于内存泄漏, 而底层应用程序崩溃的原因就更可能是由于系统依赖。

你可能感兴趣的:(编程)