在某种意义上编程很容易。但是bug总是会带来更多麻烦。谁能帮助我在c?
中使用好的调试技巧和软件答案 0 :(得分:8)
来自“编程风格的元素” Brian Kernighan,第2版,第2章:
每个人都知道调试是两次 和编写程序一样难 第一名。所以,如果你像聪明一样 你可以在写作时,怎么会 你有没有调试过它?
从那以后;不要“太聪明”!
但除此之外,已经给出了答案;使用调试器!这是工具方面的起点。你会惊讶于有多少程序员在没有调试器的帮助下挣扎,他们这样做是愚蠢的。
但是在你进入调试器之前,让你的编译器尽可能地帮助你;将警告级别设置为高,并将警告设置为错误。诸如lint,pclint或QA-C之类的静态分析工具会更好。
答案 1 :(得分:4)
用于调试的工具都很好,对于某些类型的错误,他们只会直接指出问题所在。我调试的最佳提示是你需要以正确的方式思考它。对我有用的是:
其他人会有其他方法来接近调试,但我发现你是否有一个结构化的方法,而不是随意改变你的东西,你通常会到那里,当你为不可避免的事做好准备为什么没有我马上就看到了!
答案 2 :(得分:3)
C的最佳调试器
内存泄漏检查的最佳工具:
答案 3 :(得分:2)
以下是流行的调试工具。
一些非常简单技巧/建议
- >请务必检查您的代码中是否已取消引用wild/dangling pointer
示例1)
int main()
{
int *p;
*p=10; //Undefined Behaviour (crash on most implementations)
}
示例2)
int main()
{
int *p=malloc(sizeof(int));
//do something with p
free p;
printf("%d", *p); ////Undefined Behaviour (crash on most implementations)
}
- >始终在使用
之前初始化变量 int main()
{
int k;
for(int i= k;i<10;++i)
^^
Ouch
printf("%d",i");
}
答案 4 :(得分:1)
单元测试。使您的软件更容易正确。
答案 5 :(得分:1)
答案 6 :(得分:1)
这可以分为:
预防措施:
后呈文
答案 7 :(得分:1)
除了所有其他建议(gdb,valgrind,所有这些)之外,编写代码时的一些简单规则在以后进行调试时会有很大帮助。
size_t
)表示基数的数组索引和数字,
ptrdiff_t
指针差异,
off_t
用于标记和案例区别的文件偏移等enum
类型。int
,long
,char
或
随你。尽可能避免使用它们。char
算术,签名问题是一个瘟疫。使用uint8_t
或int8_t
如果你觉得需要这样的话
的事情。double
,指针,struct
。它是
这不是真的,效率较低
用现代的编译器。在大多数情况下,它只会
在没有必要时被优化掉。
但特别是指针变量
没有正确初始化可以
产生虚假错误并制作代码
很难调试。如果你有它们
已初始化为NULL
您的计划
会提前失败,你的调试器会告诉你这个地方。assert
宏。这迫使你想到你的假设,也会让你的
如果代码未得到满足,代码会提前失败。答案 8 :(得分:0)
离开我的头顶,Valgrind。
答案 9 :(得分:0)
您可能还希望通过阅读本书Debugging by David Agans来提高您的调试技巧。每个程序员都应该在他们职业生涯的早期阅读。
答案 10 :(得分:0)