问题集锦:
1.dev的代码自动补全功能(vs的智能提示功能)的快捷键
2 调试时,二维字符数组的样子
如图很是怪异:
3.这篇博文可以供以后出现问题后参考,其主要改变的是程序那个标签页
https://blog.csdn.net/coding_my_future/article/details/8766782
4.关于CCF的devc++环境,CCF的环境是在我的收藏里有,然而并不能调试,可能是因为我的电脑已经安装过dev了,
1.以前设置dev调试的记录。
以前设置后不知道哪里不合适 ,调试 中查看到的变量总是和真实的数据不一样,相差2,这次 终于对了,所以我把设置都截图了,供大家参考。概括的说就是设置产生调试信息,并且使用64bit debug 。在连接器命令行加入如下命令:
-static-libgcc
我用了很长的时间来探索到底该怎么正确的使用dev调试,得出的最终结论是用dev调试程序真的还不如自己检查代码。
理由如下:首先很多dev不能调试即使按照网上的很多说法,或者按照我的说法填上-g3 输出调试信息等等,但是这款dev还是不能调试,我最终还是找到了办法,那就是将dev的兼容性修改为winXp我的电脑是win7的,然后就可以调试了。但是你不要高兴太早,dev的调试非常鸡肋,只能查看单一的变量,如果查看vector 或者 string对象,调试就会卡住。用这个ide查看多维数组,甚至二维数组非常麻烦,实在是太艰难了。如果你说可以用gdb命令,那么你错了,我尝试在那个窗口输入gdb命令会报错,就算可以,输入gdb命令那也太麻烦了吧。我最终还是决定放弃这款ide 虽然我在上次的pat考试中由于失误,没有敲 using namespace std;导致出现重大失误,但是这个dev实在无可救药。
还有另外一个奇怪的现象,我用的freopen打开文件,用getline读文件,虽然第一次调试是正常的,但是在后来几次调试就无法正常读取数据,在cmd里面输入也没有用,不知道到底发生了啥。这个ide被它的公司放弃真的是有原因的,太难用,很不稳定。要是不熟练代码,需要调试真的不要用这个ide,否则这个ide会气死你。
但是仍然要多用dev,毕竟不是每个考场都有vs,所以我又写了以下内容供大家参考。
2.对dev新的拯救
1.调出函数的定义:在参数位置点击(这样做的好处是函数定义弹出后不会很快消失),等待,直到括号变红,就会自动弹出函数的定义。如图所示:
2 最简单的调试设置。
上面说的那个调试的设置实在是有点复杂了,记不住,现在我重新写了一个简单的,并且经过我实际检验过的设置。以下进行一些简要的概括。
dev调试设置实际上是根据每个编译器设置的,如图所示。dev有64-bit的编译器,debug选项,还有profile等。每个编译器对应一种编译器设置。许多人根据网上的设置后不能编译是因为这里没有选对。
下面针对,64-bit release这个编译器进行编译器设置。(根据我接下来的测试,这里选择64-bit debug 这个编译器可以进行同样编译器设置,一样可以调试,甚至效果更好)
1.把调试信息更改为产生调试信息。如图
具体路径如下:
工具 编译选项 代码生成优化 连接器
2.在编译器这个标签中添加-g选项,上下都添加。
如图:
3.其他选项的基本情况:
其他选项要么选择no,要么选择空。尤为注意选择空的选项,当你点开下拉框时,第一个选项就是空,这个时候空是可选择的。这里选择GNUc++就可以了,因为这里没有c++99这个选项。选择GNUC++应当就是c++99标准了。
4.注意程序这个标签,这个标签下的选项不需要更改,但是如果有所更改,那么可以按照下图改回来。
5 用dev调试提示unknown signal
解决方法:关闭调试,然后重新编译,重新调试
6 dev调试提示计算机缺少zlib1.dll
这种错误一般在考场上无法解决。
7 dev调试多维数组
dev显示的二维数组s,dev会用逗号将每一维的数据分割开来。可能是由于没有将数组s初始化,所以s的数值中有一些奇怪的任意值。
Dev调试时多维数组的显示是反的(这句话是啥意思) 最前面会有一个数字 往往是零,然后说零重复了多少次,等等。
8 dev调试vector
1 比如说有一个长度为3的vector v,如果想要查看v[0]的值,就在添加查看中写 (&v[0])
2 如果想要查看整个数组的值,就可以写(&v[0])@3
3 @后面的数字表示想要查看的长度,这里vector的长度是3所以可以写3就能看到所有的值~
4 有时,调试器(Debugger)可能不知道某个指针的类型,从而不能显示该指针指向的变量的值。 此时,我们需要手动输入该指针的类型。按 F4 后,以 *(type *)pointer 形式输入。例如, *(int *)pointer。
9 dev调试指针类型
1 有时,调试器(Debugger)可能不知道某个指针的类型,从而不能显示该指针指向的变量的值。 此时,我们需要手动输入该指针的类型。按 F4 后,以 *(type *)pointer 形式输入。例如, *(int *)pointer。
9 代码补全功能的替代方案
只要能记住某个库函数在那个头文件中,然后就可以去这个头文件中去找。
3 CCF dev环境在自己电脑上的安装和编译器配置。
一 安装
安装过程比较熟练了,我就不说了,这个软件是绿色软件,在首次打开的时候,还提示我是否需要缓存头文件,应该选择不需要缓存任何头文件,即第三个选项。不缓存实际上不影响任何东西,只是如果需要代码补全功能就需要缓存头文件了。不过代码补全功能可能没有啥用处。
二 编译器配置
这个dev是绿色文件,可以编译,但是却不能够调试程序。报错提示系统找不到该文件,显示的是dev的存放路径和系统的path变量。
解决办法:这种问题一般都是由于编译配置不正确造成的,解决办法:先删除原来的编译配置,然后添加自动编译配置。如图所示:
第一个按钮是添加自动编译配置(这个按钮的自动配置功能能够自己找到gdb gcc所在目录,然后完成配置,十分强大,比自己手动去找路径,然后配置要强大很多),第三个按钮是删除原来的编译配置。CCF提供的问题解决文档也建议出现配置问题首先删除原来配置,然后添加自动编译配置。如图:
所以可以说出现的很多编译或者调试上的问题都可以用这个办法解决。
三 其他问题
没想到设置好编译器后又出现了一系列奇奇怪怪的问题。
1 设置断点后调试时无法停在断点处。
如果设置好编译配置和打好断点后,调试时却无法停留在断点处。解决办法是重新启动dev,然后再试。不行就再配置一次编译器,然后再重启,应该就能好了。
2 设置断点后调试时只能停留在部分断点处,并且不能逐步调试。
这个问题真的是太怪了,没办法啊 dev就是这么怪异。我调试的是如下代码,没想到dev只在while处停留一下,然后点下一步,就跳到程序结尾了。
解决方法:我原本分析是编译没能覆盖原来的编译好的.exe文件,所以我删除了编译好的.exe文件,然后重新编译,调试,还是不行。我又尝试了另外一个办法:新建一个文件,然后把代码拷贝上去,然后改while中的scanf为1,然后调试时会报错,然后我又改了回来,然后打好断点,重新编译调试。这个办法起作用了,然后奇怪的是原来的代码居然也可以正常调试了,真是奇怪的dev啊,我都受不了了。我都搞不清楚到底是我把while中的scanf改成1起作用了,还是新建了一个文件,然后重新编译起作用了。我很迷??????
然后我打开另外一个也有这种问题的绿色版dev ,测试了下,还是新建一个文件,然后重新编译,打断点,调试更能起作用。
这种奇怪的现象有可能也是由于没有适当的初始化化变量造成,或者程序的scanf printf处的格式,freopen处的文件名字不合适等等。freopen处的文件名字中最好不要含特殊符号吧,就用英文名字就行了。
3 代码格式化
1. 很多考场的dev上没有安装代码格式化插件,如果安装了,那这个格式化按钮要么在最上面那行,叫做Astyle 或者类似的名字。如图
或者在工具里最下面那个选项。
快捷键一般为ctrl + shift + a
2 如果考场上的dev没有安装代码格式化插件,那么只能靠一些技巧了。如下:
1. 使用dev的插入代码段功能时(这时的插入和粘贴实际上差不多)先把光标停留在要插入行的绝对行首,不要在插入之前将光标停留在代码格式化后的位置。 然后将插入的代码块选中,然后使用tab键 调整这段代码块的整体位置。
2. 使用复制再粘贴功能时,再选中要复制的代码块时一定要注意,就是要将光标从要复制的代码块的首行的绝对行首开始移动而不是相对行首,如图
正确的方式
错误的方式
复制完成后然后进行粘贴,粘贴的注意事项和操作和上面第一点插入时一样的
4 . 调整语言和字体
语言的调整在工具中的环境选项,而字体的调整在工具中的编辑器选项中。
5 快速换行快捷键
实际上这个也算不上个快捷键,只是快速连续按下连个键,先用中指按下end 再用二拇指按下enter 。不过由于考场上是键盘,这两个键的距离实际上还挺远的。
6 删除空行,
如果只有一行空行,在dev中没有shift+delete这个快捷键,只能先把光标移动到绝对行首,然后按下backspace,而不是delete 。这样才能保证原来的代码格式不变形。