必赢手机app下载下面是我亲身使用的解决方法,

作者:网络

本人在使用Secure CRT的过程中,出现了这样一个问题:使用vim编程过程中,经常因为窗口的切换而出现光标不可见。

VS是一个强大的IDE,如果你现在只会简单地用它查看一下执行效果,那就太大材小用了。

必赢手机app下载 1

分析原因,可能跟我用的window8版本有关,我同事用的window7就没有这个问题。

1. CRT函数报错

首先来说说最常见的一个编译错误。微信里常常收到这个错误的截图提问。

CRT(C Runtime Library = C运行时间库)是windows平台下的一个概念。CRT函数准的C语言函数。例如:printf、scanf、strlen、fopen等函数都属于CRT函数。

安全CRT函数是微软对C/C++的扩展,对大部分的CRT函数都派生了一个新的函数形式。比如把fopen函数重新定义如下:

errno_t fopen_s(FILE** pFile, const char *filename, const char *mode);

微软认为,使用这种函数能够帮助开发者更好地规避内存泄露、空指针访问等常见问题。为了尽量让大家养成使用安全CRT的习惯,在编译没有使用安全CRT函数的代码时,VS会报出如下错误:

Error 1 error C4996: 'freopen': This function or variable may be unsafe.
Consider using freopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details. e:cvstestcvstestcfileoper.c 8 1 VSTestC

如果你想让自己的代码写的更通用,不想使用微软的所谓安全CRT函数,可以使用下面的方法:

第一期的编程手把手计划即将结束,在最后一篇文章里我们来聊聊如何用VS进行程序调试。之前提到过,VS是一个强大的IDE,如果你现在只会简单地用它查看一下执行效果,那就太大材小用了。

下面是我亲身使用的解决方法,以前碰到不能看见光标,我都只能关闭重新进入,这样导致vim的使用很不方便。

1.1 代码中定义宏

如果你仔细越短报错信息,就会发现其实VS已经告诉你怎么解决了。只要定义一下_CRT_SECURE_NO_WARNINGS就能解决。把下面的句子写在代码中:

#define _CRT_SECURE_NO_WARNINGS

现在编译是不是就成功了。

1. CRT函数报错

首先来说说最常见的一个编译错误。微信里常常收到这个错误的截图提问。

CRT(C Runtime Library = C运行时间库)是windows平台下的一个概念。CRT函数准的C语言函数。例如:printf、scanf、strlen、fopen等函数都属于CRT函数。

安全CRT函数是微软对C/C++的扩展,对大部分的CRT函数都派生了一个新的函数形式。比如把fopen函数重新定义如下:

errno_t fopen_s(FILE** pFile, const char *filename, const char *mode); 

微软认为,使用这种函数能够帮助开发者更好地规避内存泄露、空指针访问等常见问题。为了尽量让大家养成使用安全CRT的习惯,在编译没有使用安全CRT函数的代码时,VS会报出如下错误:

Error 1 error C4996: 'freopen': This function or variable may be unsafe.
Consider using freopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details. e:cvstestcvstestcfileoper.c 8 1 VSTestC

如果你想让自己的代码写的更通用,不想使用微软的所谓安全CRT函数,可以使用下面的方法:

下面这个方法相对来说就好用多了。

1.2 工程中配置

如果非安全CRT函数用在很多不同的文件中,由于作用域的关系,你可能需要在多处写下宏定义语句。这样不太方便,这时候你可以选择在工程配置中一劳永逸的解决这个问题。步骤如下:

  • 打开工程属性界面

在工程名上右键,选择“Properties”,进入下面的界面。

必赢手机app下载 2

  • 宏定义添加窗口

必赢手机app下载 3

如图,选择“Configuration Properties” -> “C/C++” -> “Preprocessor” -> “Preprocessor Definitions”。点击右边的下拉箭头,之后点击“Edit”。

  • 添加宏定义

_CRT_SECURE_NO_WARNINGS添加到List中。

必赢手机app下载 4

之后,点击OK。

现在编译试试,报错没有了。

1.1 代码中定义宏

如果你仔细越短报错信息,就会发现其实VS已经告诉你怎么解决了。只要定义一下_CRT_SECURE_NO_WARNINGS就能解决。把下面的句子写在代码中:

#define _CRT_SECURE_NO_WARNINGS

现在编译是不是就成功了。

方法其实很简单:只要点击工具栏的任意一个选项一下就可以了,例:点击一下 文件选项,光标就会出现了。

1.3 静态引用运行时库

打开打开工程属性界面,选择“C/C++” -> “Code Generation” -> “Runtime Library”。

必赢手机app下载 5

如图,默认情况下是动态引用。我们需要改成静态引用。

必赢手机app下载 6

下拉窗中的四个选项意义如下。

对与debug版本的程序:

  • /MTd 静态引用运行时库的debug版本
  • /MDd 动态引用运行时库的debug版本

对与release版本的程序:

  • /MT 静态引用运行时库的release版本
  • /MD 动态引用运行时库的release版本

1.2 工程中配置

如果非安全CRT函数用在很多不同的文件中,由于作用域的关系,你可能需要在多处写下宏定义语句。这样不太方便,这时候你可以选择在工程配置中一劳永逸的解决这个问题。步骤如下:

  • 打开工程属性界面

在工程名上右键,选择“Properties”,进入下面的界面。

必赢手机app下载 7

  • 宏定义添加窗口

必赢手机app下载 8

如图,选择“Configuration Properties” -> “C/C++” -> “Preprocessor” -> “Preprocessor Definitions”。点击右边的下拉箭头,之后点击“Edit”。

  • 添加宏定义

_CRT_SECURE_NO_WARNINGS添加到List中。

必赢手机app下载 9

之后,点击OK。

现在编译试试,报错没有了。

必赢手机app下载,就这么简单,解决了光标消失的问题。

1.4 忽略警告

报错信息中,有这样一部分error C4996:,这是这个问题的错误码。我们可以显示地要求VS不要提示这种问题的信息。只要在代码开始的部分加入下面这句话即可:

#pragma warning(disable:4996)

问题是不是解决了。

必赢手机app下载 10

1.3 静态引用运行时库

打开打开工程属性界面,选择“C/C++” -> “Code Generation” -> “Runtime Library”。

必赢手机app下载 11

如图,默认情况下是动态引用。我们需要改成静态引用。

必赢手机app下载 12

下拉窗中的四个选项意义如下。

对与debug版本的程序:

  • /MTd 静态引用运行时库的debug版本
  • /MDd 动态引用运行时库的debug版本

对与release版本的程序:

  • /MT 静态引用运行时库的release版本
  • /MD 动态引用运行时库的release版本

确实,就是这么简单。

2. 查看运行结果

#include 

int main()
{
    printf("Hello world!");
    return 0;
}

上面这段代码,如果直接按F5运行,你会看到一个一闪而过的控制台窗口。这个窗口出现的时间很短,以至于很难看清楚结果。解决这个问题又很多方法,常见的大概有下面四种:

1.4 忽略警告

报错信息中,有这样一部分error C4996:,这是这个问题的错误码。我们可以显示地要求VS不要提示这种问题的信息。只要在代码开始的部分加入下面这句话即可:

#pragma warning(disable:4996)

问题是不是解决了。

必赢手机app下载 13

CRT的过程中,出现了这样一个问题:使用vim编程过程中,经常因为窗口的切换而出现光标不可见。 分析原因,可能跟我用...

2.1 Ctrl + F5

这个是最常见的方法,按下Ctrl + F5组合键,会看到下面这个结果:

必赢手机app下载 14

美中不足的是系统会自动添加一行字:“请按任意键继续...”。当你按任意键之后,窗口消失。

2. 查看运行结果

#include 

int main()
{
    printf("Hello world!");
    return 0;
}

上面这段代码,如果直接按F5运行,你会看到一个一闪而过的控制台窗口。这个窗口出现的时间很短,以至于很难看清楚结果。解决这个问题又很多方法,常见的大概有下面四种:

2.2 断点

必赢手机app下载 15

如图所示,在最后一行代码处打断点。之后,按F5开始调试执行程序,会看到下面这个结果:

必赢手机app下载 16

程序被停在断点处,而命令行窗口也被停下了。看完结果后,只需要再按一下F5继续执行程序,它就会正常结束。

2.1 Ctrl + F5

这个是最常见的方法,按下Ctrl + F5组合键,会看到下面这个结果:

必赢手机app下载 17

美中不足的是系统会自动添加一行字:“请按任意键继续...”。当你按任意键之后,窗口消失。

2.3 getch()

通过getch函数,可以实现和2.1相同的效果,不过没有哪行字。代码如下:

int main()
{
    printf("Hello world!");
    getch();
    return 0;
}

执行这段代码,命令行会停在新加这行代码执行后,直到按下任意键程序才继续执行到结束。

2.2 断点

必赢手机app下载 18

如图所示,在最后一行代码处打断点。之后,按F5开始调试执行程序,会看到下面这个结果:

必赢手机app下载 19

程序被停在断点处,而命令行窗口也被停下了。看完结果后,只需要再按一下F5继续执行程序,它就会正常结束。

2.4 system("pause")

system函数是不是很熟悉,上一篇文章中我们已经认识过了。加上这句话其实是调用了系统提供的pause这个命令。效果和2.1完全相同。

2.3 getch()

通过getch函数,可以实现和2.1相同的效果,不过没有哪行字。代码如下:

int main()
{
    printf("Hello world!");
    getch();
    return 0;
}

执行这段代码,命令行会停在新加这行代码执行后,直到按下任意键程序才继续执行到结束。

3. 单步调试

依然是前面那段代码,我们按F10键来进行单步调试。

必赢手机app下载 20

左边黄色的箭头表示当前程序的执行位置。按一下F10键,箭头指向的这行代码就被执行,同时箭头指向下一行。这样完全按照程序运行的过程执行。

必赢手机app下载 21

如果程序是这样,在调用Function函数时,如果按F10,程序会一次执行完整个Function函数。但如果你按F11,箭头会进入Function函数内部,就像这样:

必赢手机app下载 22

在程序运行中,把鼠标停留在一个变量上,此时会看到这个变量当前的值。如下图:

必赢手机app下载 23

当然,还可以把这个变量拖入watch窗口,这样就能实时查看这个变量的变化:

必赢手机app下载 24

单步调试还有很多神奇之处需要你慢慢发现。这部分内容不好讲,不过你只要稍微操作一下就能学会。

2.4 system("pause")

system函数是不是很熟悉,上一篇文章中我们已经认识过了。加上这句话其实是调用了系统提供的pause这个命令。效果和2.1完全相同。

4. 条件断点

int main()
{
    int i;
    for (i = 0; i < 100; i++)
    {
        printf("i = %dn", i);
    }

    return 0;
}

这段代码很简单,打印0~99这100个数,假如,我是说假如你的程序运行到第95次循环时出现了问题,如果你想单步调试看看i的变化情况,你不可能一直按F10直到第95次循环。那样手肯定吃不消。这时候,就用到了条件断点的方法。修改代码如下:

必赢手机app下载 25

如图,添加一组 if 语句,把断点打在 if 中的代码里。现在按F5调试执行,程序会在第95次循环中我们打断点的地方停下,之后你再按F10单步调试就好了。是不是简单多了。

3. 单步调试

依然是前面那段代码,我们按F10键来进行单步调试。

必赢手机app下载 26

左边黄色的箭头表示当前程序的执行位置。按一下F10键,箭头指向的这行代码就被执行,同时箭头指向下一行。这样完全按照程序运行的过程执行。

必赢手机app下载 27

如果程序是这样,在调用Function函数时,如果按F10,程序会一次执行完整个Function函数。但如果你按F11,箭头会进入Function函数内部,就像这样:

必赢手机app下载 28

在程序运行中,把鼠标停留在一个变量上,此时会看到这个变量当前的值。如下图:

必赢手机app下载 29

当然,还可以把这个变量拖入watch窗口,这样就能实时查看这个变量的变化:

必赢手机app下载 30

单步调试还有很多神奇之处需要你慢慢发现。这部分内容不好讲,不过你只要稍微操作一下就能学会。

5. 调试的乐趣

调试代码能够让编程变得不那么枯燥。当你一步一步跟着程序的执行方式去思考问题,你会更加深刻地体会计算机的某些逻辑。

另外,在你写程序时,脑子里想的是如何设计代码,但在你调试的过程你会在另外一个角度去审慎这段代码,这时你很容易发现其中的不足之处。很多情况下,一个程序有问题,看代码怎么也发现不了究竟错在哪里,不过一调试就能马上找到。

学会了代码调试,你的编程学习就算是真正入门了。它不仅仅是你软件开发中的工具,也是编程学习过程中不断提高和不断自我完善的神奇。

 

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
639368839,我们一起学C/C++!

4. 条件断点

int main()
{
    int i;
    for (i = 0; i < 100; i++)
    {
        printf("i = %dn", i);
    }

    return 0;
}

这段代码很简单,打印0~99这100个数,假如,我是说假如你的程序运行到第95次循环时出现了问题,如果你想单步调试看看i的变化情况,你不可能一直按F10直到第95次循环。那样手肯定吃不消。这时候,就用到了条件断点的方法。修改代码如下:

必赢手机app下载 31

如图,添加一组 if 语句,把断点打在 if 中的代码里。现在按F5调试执行,程序会在第95次循环中我们打断点的地方停下,之后你再按F10单步调试就好了。是不是简单多了。

5. 调试的乐趣

调试代码能够让编程变得不那么枯燥。当你一步一步跟着程序的执行方式去思考问题,你会更加深刻地体会计算机的某些逻辑。

另外,在你写程序时,脑子里想的是如何设计代码,但在你调试的过程你会在另外一个角度去审慎这段代码,这时你很容易发现其中的不足之处。很多情况下,一个程序有问题,看代码怎么也发现不了究竟错在哪里,不过一调试就能马上找到。

学会了代码调试,你的编程学习就算是真正入门了。它不仅仅是你软件开发中的工具,也是编程学习过程中不断提高和不断自我完善的神奇。

好了,这一期就到这里,我们下期再见。

我是天花板,让我们一起在软件开发中自我迭代。
如有任何问题,欢迎与我联系


上一篇:天花板编程手把手计划-第1期-第9天

本文由必赢手机app下载 发布,转载请注明来源

关键词: