哪些网站可以做签约设计师,大理州建设局网站门户网,wordpress浏览,水仙直播程序出现错误很正常#xff0c;一个优秀的程序员必须学会调试#xff0c;发现错误并改正。减少程序错误最有效的方法是#xff1a;在敲代码之前#xff0c;多花点时间思考#xff0c;如何构造程序#xff0c;数据结构和算法#xff0c;尽量把细节提前写下来#xff0c;…程序出现错误很正常一个优秀的程序员必须学会调试发现错误并改正。减少程序错误最有效的方法是在敲代码之前多花点时间思考如何构造程序数据结构和算法尽量把细节提前写下来可以尝试着在纸上写出核心代码这样可以减少今后修改代码的时间。1、常用的调试技巧(1)代码检查重新阅读程序排除比较明显的错误。编译时带上-Wall参数生成所有的警告信息。gcc -Wall -pedantic -ansi 表示以ansi/iso生成所有的警告西信息。(2)取样法在程序中增加一些代码收集更多与程序运行时的行为相关的信息。使用条件编译可以清楚的辨别哪些是调试代码有利于调试后的代码整理。例如程序编译时可以选择性的加上-DDEBUG。如果加上这个标志就定义了DEBUG这个符号从而在程序中包含调试用的额外代码没有加上该标志这些调试代码将删除。(3)程序的受控执行。用调试器来控制代码的运行随时查看这些变量的状态。为了能够调试程序需要在编译和链接时为每个源文件加上编译选项参数。这些选项的作用是让编译器在程序中添加额外的调试信息。这些信息包括符号和源代码行号调试器将利用这些信息向用户显示程序已经执行到的源代码的位置。-g标志是对程序调试性编译时常用的一个选项。调试信息的加入使可执行程序的长度成倍的增长、容量增加程序运行时的内存数量还是和原来一样程序调试结束后最好还是将调试信息从程序的发行版中删除。2、使用gdb进行程序调试常用功能命令g -g -o test test.cpp //编译时加上-g参数1、启动gdb gdb test2、help3、具备带有历史记录的命令行编辑功能方向键选择之前执行过的命令直接回车键再次执行最近执行过的那条命令。单步调试非常有用。4、quit退出5、run:执行这个程序程序运行失败时gdb会报告失败的原因和位置。6、backtrace(bt):栈跟踪失败时停止的位置帮助我们找到程序到达错误地点的路径。7、printrun 后检查变量注意变量的生命期。8、打印围绕当前位置前后的一段代码继续使用list可以显示更多的代码。9、设置断点停止程序的运行查看变量。help breakpointbreak lineNumbercontenddisplaydisable breakpoint numberclearcommands breakpointNumber. 10、设置断点后经常使用单步调试命令next(n)查看程序运行的细节。 3、valgrind内存调试动态内存分配很容易出现程序漏洞必须清楚自己分配的每一块内存而且要确定没有使用已经释放的内存块非常重要。内存调试的工具有很多这里使用的是valgrind工具。在centos 7中直接使用 yum install valgrind 安装。上面简单的代码编译运行不会发生错误但是实际上发生了很严重的内存问题。ptr[3]访问越界std::cout ptr[i]读已经释放过的内存。通过valgrind工具可以检查出来[xgwanglocalhost Desktop]$ g -g -o test2 test2.cpp[xgwanglocalhost Desktop]$ valgrind ./test221739 Memcheck, a memory error detector21739 Copyright (C) 2002-2013, and GNU GPLd, by Julian Seward et al.21739 Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info21739 Command: ./test221739 21739 Invalid write of size 421739 at 0x40081E: main (test2.cpp:8)21739 Address 0x5a1504c is 0 bytes after a block of size 12 allocd21739 at 0x4C2A7AA: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)21739 by 0x400811: main (test2.cpp:7)21739 21739 Invalid read of size 421739 at 0x40083F: main (test2.cpp:11)21739 Address 0x5a15044 is 4 bytes inside a block of size 12 freed21739 at 0x4C2B5E1: operator delete[](void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)21739 by 0x400836: main (test2.cpp:10)21739 021739 21739 HEAP SUMMARY:21739 in use at exit: 0 bytes in 0 blocks21739 total heap usage: 1 allocs, 1 frees, 12 bytes allocated21739 21739 All heap blocks were freed -- no leaks are possible21739 21739 For counts of detected and suppressed errors, rerun with: -v21739 ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 2 from 2)