[CareerCup] 12.2 Find the Reason of Crash 找到程序崩溃的原因

12.2 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?

这道题说有个应用程序运行的时候崩溃了,在调试运行了十次后,发现在同一个地方不崩溃了。这个应用是单线程的,只用了C语言的标准库,问什么程序原因会导致这个崩溃,怎么样检测每一个原因。根据书上的描述,我们先来看一个会导致程序崩溃的通常的原因:

1. 随机变量。程序有时候会用一些随机数字或变量,每次运行时值都不同。

2. 未初始化的变量。程序有未初始化的变量,在有些程序语言中,这可能会赋值为任意值。

3. 内存泄露。程序有时候会用尽内存,也包括堆和栈的溢出。

4. 外部依赖:程序有时候会依赖其他的应用,机器或资源。如果有很多的外部依赖,很有可能程序会在某一点崩溃掉。

既然程序不在同一个地方崩溃,那么有可能是和某一个部件或场景相关联。例如,可能程序在打开后,什么都不动的情况下是好的,但是当读入了一个文件,或者有了其他的操作时,崩溃了。那么我们就最好用排除法来找原因,关掉所有其他的应用,仔细追踪各种资源。如果有部分程序可以禁用,那么就禁用掉,然后在不同的机子上跑程序看是否会遇到同样的问题。

另外我们也可以借助一些专业的工具来帮我们找错,比如对于问题2,未初始化的变量,就有专门的工具来替我们找到这些变量。

时间: 2024-12-24 02:12:26

[CareerCup] 12.2 Find the Reason of Crash 找到程序崩溃的原因的相关文章

[CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法

12.3 We have the following method used in a chess game: boolean canMoveTo( int x, int y). This method is part of the Piece class and returns whether or not the piece can move to position (x, y). Explain howyou would test this method. 这道题让我们测试象棋游戏中的移动

Python Cookbook(第3版)中文版:14.12 调试基本的程序崩溃错误

14.12 调试基本的程序崩溃错误? 问题? 你的程序崩溃后该怎样去调试它? 解决方案? 如果你的程序因为某个异常而崩溃,运行 python3 -i someprogram.py 可执行简单的调试.-i 选项可让程序结束后打开一个交互式shell.然后你就能查看环境,例如,假设你有下面的代码: # sample.py def func(n): return n + 10 func('Hello') 运行 python3 -i sample.py 会有类似如下的输出: bash % python3

[CareerCup] 12.1 Find Mistakes 找程序错误

12.1 Find the mistake(s) in the following code: unsigned int i; for (i = 190; i >= 0; --i) printf("%d\n", i); 这道题让我们找出给定的简短的程序的错误,这里共有两处错误: 1. 无符号整型永远大于0,所以i >= 0没有意义 2. 打印无符号整型要用%u 正确代码参见下方: unsigned int i; for (i = 190; i > 0; --i) pr

iOS Crash 分析 符号化崩溃日志

参考: http://blog.csdn.net/diyagoanyhacker/article/details/41247367 http://blog.csdn.net/diyagoanyhacker/article/details/41247389 http://blog.csdn.net/diyagoanyhacker/article/details/41247411 http://www.cnblogs.com/smileEvday/p/Crash1.html 未符号化的崩溃日志就象一

写一个函数计算但参数为n(n很大)时的值1-2+3-4+5-6+7……+n。(考虑程序执行效率)

1 private static void jisuan(int n) { 2 int sum=0; 3 if(n%2==0){ 4 sum=-(n/2); 5 System.out.println(""+sum); 6 }else{ 7 sum=-(n-1)/2+n; 8 System.out.println(""+sum); 9 } 10 } 注意:-(n-1)/2是1-2+3-4..+n(偶数)的代表式此段代码,效率是最高的.

9.12/ css3拓展、js基础语法、程序基本知识、数据类型、运算符表达方式、语句知识点

css3拓展: <display:none>  将某个元素隐藏       <visibility:hidden>  也是将某个元素隐藏 <display:block>  显示                     <visibility:visible>  显示 <display>与<visibility>的区别在于:<display>隐藏后不占位置   <visibility>隐藏后位置还在 当两个<

Windows Phone &amp; Windows App应用程序崩溃crash信息抓取方法

最近有用户反馈,应用有崩溃的情况,可是本地调试却无法重现问题,理所当然的,我想到了微软的开发者仪表盘,可以查看一段时间内的carsh记录,不过仪表盘生成carsh记录不是实时的,而且生成的报告查看非常不便,是否有其他方法抓取应用的崩溃记录呢? 其实目前已经有一些第三方提供了相应的工具插件,如国外的uTest(http://www.utest.com/),mtiks(http://www.mtiks.com/),国内的九幽(http://www.windows.sc)等等,小弟英语比较烂,就只研究

linux下 gdb+coredump 调试偶发crash的程序

1. 打开 core dump 查看是否打开 ulimit -c 如果输出0, 说明没有打开. 方法一:使用命令 ulimit -c unlimited 可以打开,但是只对当前终端有效, 方法二: 配置 /etc/profile 文件 sudo gedit /etc/profile 在最后添加一行 ulimit -S -c unlimited > /dev/null 2>&1 可以始终打开core dump , unlimited 可以改为具体的数字,比方说 1024 来限制 core

Elmah 日志记录组件

[http://www.cnblogs.com/chenkai/archive/2013/01/26/2877855.html] 常在服务器端处理用户请求时.特别是针对Web应用程序.当出现异常是可以根据日志操作记录还原异常出现时操作步骤.而记录异常堆栈信息判断问题出现问题位置. 为了跟踪和记录服务器行为.特别是针对出现异常时构建简单.统一的异常处理模式就显得尤为重要. 如果有一个基础的架构用来记录服务器端中日志和事件.那么对于调试和在问题的解决就变得更加简单直接.针对日志记录.可能针对大部分开