原创:https://blog.csdn.net/ndzjx/article/details/88901862
1:明确需求
2:设计程序(如何构造程序,什么样的数据结构,它如何在程序中使用)
3:调试+优化
gdb 为了调试程序,在编译时需要加上一个或多个特殊的编译器选项,这些选项的作用是让编译器在程序中添加额外的调试信息,包括各种符号和源代码行号。
-g标志是调试性编译时常用的一个选项。
strip <file> 将可执行文件中的调试信息删除而不需要重新编译程序。
gcc -g -o pro pro.c
gdb pro
run
cont
backtrace bt where
print j
print a[3]
list
break 20 在第20行下一个断点
print array[0]@5 打印叔=数组多个元素
display array[0]@5 ; display命令告诉gdb,每次程序停在断点时自动显示数组内容
commands 修改断点设置,使程序不再断点处停下来,而是显示要查看的数据,然后继续执行。
> display array[0]@5
> cont
> end
info查看设置过的断点及display命令的内容
info display
info break
禁用
disable break 1
disable display 1
break 30
commands 2 ;在第二处断点处设置命令
> set variable n = n + 1
> cont
> end
断点可以和计数、条件结合在一起设置。
gdb还可以将其自身附在已经运行的程序上。
gcc -O -g 同时获得程序优化和调试信息的好处。
splint -strict pro.c 静态检查
assert.h定义的宏受NDEBUG的影响,NDEBUG定义了,就不定义assert宏。
gcc -DNDEBUG pro.c