c - 查找 C 源代码可能存在的问题的工具和方法

标签 c

编辑 感谢大家的投入。我想我的问题有点模糊。因此,我接受了一个明智的答案,并选择了 2 小时顽固的 exit(9) 调试并发现或至少删除了两个错误,现在我很自豪能够解决一个难题......;-)

我在 http://www.spoj.pl 上投入了大量时间来解决问题,并且该程序在本地与我自己创建的所有测试样本以及问题描述中的测试样本一起工作。

但是,程序在服务器上以 SIGSEGV 中止。在那里,我上传了它并选择了 C99 strict 语言选项。

编辑:让我再次明确指出,绝对没有关于SIGSEGV 是如何发生的暗示。我所掌握的唯一信息就是它确实发生过。感谢@Oli Charlesworth 指出这一点。

在本地,我都编译过

gcc -Wall -Wextra -std=c99 -o prog prog.c

gcc -Wall -Wextra -m32 -std=c99 -o prog prog.c

一切正常。 64 位版本是在常规的 Debian squeeze amd64 系统上编译的,-m32 版本是在常规的 Debian Lenny amd64 系统上编译的(但只是因为 Squeeze 被 -m32 破坏了)。

valgrind -v 也非常适合我的程序。

我所有的 malloccalloc 都确保返回值不为零。除了 tsearch 之外,我没有使用任何东西,而是非常常见的标准函数。

我想收集一些关于如何找出问题所在的指示。 (如果除了假设输入具有意想不到的属性之外还有什么)

最佳答案

在反馈如此有限的环境中,您可以使用一种工具,我称之为“二分搜索”来寻找问题的根源:

首先上传将在服务器上运行的最简单的“hello world”程序,并验证它不会崩溃。然后,开始添加代码块,直到程序确实 崩溃。当它发生时,回溯并添加更小的代码块,直到您将范围缩小到导致崩溃的特定代码段。

缩小范围后,您可以尝试重写麻烦的代码块,或者寻找不同的方法来实现正确的结果。

关于c - 查找 C 源代码可能存在的问题的工具和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478141/

相关文章:

c - 安装 msys2 并运行 "pacman -Syuu"后如何解决冲突?

c - Omap 5912 的 IDE 和开发工具

c - 以错误的顺序调用内核模块 Init 和 Exit 函数

c - 让 GCC 在 32 位代码 (-m32) 中使用 AVX?

C 基本菜单驱动程序,无全局变量的气体计算器

c - 理解问题 - 不使用分支时最多两个数字

计算位数 - 哪种方法最有效?

c++ - 删除远程用户帐户功能

c - 捕获信号时使 open() 返回

c - 在这种情况下 'character set' 是什么?