1. argc和argv
argc和argv中的arg指的是"参数",首先是一个计算提供的参数到程序,第二个是对字符串数组的指针
argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数
* argv[ ]: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数
argv[0] 指向程序运行的全路径名
argv[1] 指向在DOS命令行中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串
以此类推
2. 调试的层级
无 无调试信息
/Zd 目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息
/Z7 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等
/Zi 创建一个程序库(PDB),包括类型信息和符号调试信息
/Zl 除了前面/Zi的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使#pragma设置的优化功能无效
选择Link页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL
如果C/C++页中设置了Program Database以上的选项,则Link incrementally可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),而不必每次都从头开始编译。
3. trace函数:使用方法和printf完全一致,他在output框中输出调试信息,release跳过
trace在控制中的应用:
1)在read文件的时候,首先通过trace给出read文件的path。
2)在read失败的时候,通过trace给出read失败的提示再return。
4. 关于分级控制:比如这里的pcv的read部分。
1)主函数首先有个trace,告诉大家读了什么文件,以read pcv开头。
2)主函数主要包括根据不同的文件类型进行了子函数进入的分类。有个if else的判定,最终返回了stat。子函数包括了readantex和readngspcv。
3)子函数的trace因此包括了readantex和antex pcv open error。
4)不同的trace的开头,可以看出问题的层级是不一样的。
5. 除了trace,还有其他的调试手段吗?
ASSERT 它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。对于系统中出现这个宏 导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。例如,对于一个还没有创建的窗口调用SetWindowText等。
VERIFY 和ASSERT功能类似,所不同的是,在Release版本中,ASSERT不计算输入的表达式的值,而VERIFY计算表达式的值。
6. 关于命名。引用google命名规范。
1)类首字母大写不包括下划线,比如class MyClass()
2)函数首字母小写,后面的单词大写,中间不包括下划线,比如int myFunction()
3)变量全小写,中间用下划线隔开
4)全局变量前加g_
5)常量全大写
6)类的成员变量用下划线结尾,函数的局部变量则不用下划线结尾。
7)初始化数组的时候度,指定赋值数组的时候,记得在最后一个元素后加一个 “,”,为了维护长数组。
8)(后略)
Reference:
1、http://blog.csdn.net/ndjk454164628/article/details/31061603调试技巧
2、http://blog.csdn.net/voidccc/article/details/37599203命名规范
3、https://baike.baidu.com/item/argc%20argv/10826112?fr=aladdinargc&argv