C语言——调试技巧

简介: C语言——调试技巧

1.Debug和Release的介绍



Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。


Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优

的,以便用户很好地使用。

image.png

2.调试快捷键


最常使用的几个快捷键:

F5

启动调试,经常用来直接调到下一个断点处。

(下一个断点是程序逻辑上的下一个断点,进入断点循环后相当于F11);

F9

创建断点和取消断点 断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

F10

逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。

F11

逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最常用的)。

CTRL + F5

开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

3.调试时查看程序当前信息


1.查看临时变量的值

在调试开始之后,用于观察变量的值

image.png

2.查看内存信息


在调试开始之后,用于观察内存信息。

image.png

3.查看调用堆栈

通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置

image.png

4. 查看汇编信息

在调试开始之后,有两种方式转到汇编: (1)第一种方式:右击鼠标,选择【转到反汇编】:

image.png

(2)第二种方式:可以切换到汇编代码

image.png

5.查看寄存器信息

可以查看当前运行环境的寄存器的使用信息

image.png

4.调试C语言实现单链表的简单示例


#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct Node {
    int data;
    struct Node* next;
} Node;
// 在链表末尾插入节点
void append(Node** head, int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    if (*head == NULL) {
        *head = newNode;
    } else {
        Node* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}
// 遍历链表并打印所有节点的值
void printList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}
int main() {
    Node* head = NULL;
    append(&head, 1);
    append(&head, 2);
    append(&head, 3);
    append(&head, 4);
    append(&head, 5);
    printList(head);
    return 0;
}

上述代码实现了一个简单的单链表,包含两个函数:append用于在链表末尾插入节点,printList用于遍历并打印链表中所有节点的值。


要在VS中调试这段代码,可以按照以下步骤进行:

打开Visual Studio,并创建一个新的C语言项目。

将上述代码复制到项目中的.c文件中(例如main.c)。

在需要设置断点的行的左侧行号部分单击,或者按下F9键,设置断点。在这个示例中,我们可以在printList(head)行上设置断点,以便在打印链表之前停止程序执行。

单击Start Debugging(或按下F5)开始调试程序。

程序将在设置的断点处停止执行。此时,您可以使用调试工具栏上的按钮(例如Step Over、Step Into、Step Out)逐行执行代码,查看变量的值以及程序的执行流程。

在调试过程中,您可以在Locals窗口中查看变量的值,或者通过鼠标悬停在变量上来查看其当前值。

调试完成后,您可以点击Stop Debugging按钮(或按下Shift+F5)结束调试过程。

通过以上步骤,您可以使用VS进行C语言单链表代码的调试,并观察程序的执行过程和变量的值,以便定位和解决问题。

相关文章
|
7月前
|
存储 编译器 C语言
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存2
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存
|
7月前
|
程序员 C语言 C++
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存1
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存
|
7月前
|
C语言
C语言使用宏定义实现等级调试输出PRINT_LEVEL
C语言使用宏定义实现等级调试输出PRINT_LEVEL
131 0
|
2月前
|
C语言
C语言调试
C语言调试
19 0
|
4月前
|
C语言 索引
C语言编译环境中的 调试功能及常见错误提示
这篇文章介绍了C语言编译环境中的调试功能,包括快捷键操作、块操作、查找替换等,并详细分析了编译中常见的错误类型及其解决方法,同时提供了常见错误信息的索引供参考。
|
6月前
|
安全 编译器 程序员
【C语言】:VS实用调试技巧和举例详解
【C语言】:VS实用调试技巧和举例详解
53 1
|
6月前
|
存储 编译器 C语言
C语言学习记录——调试技巧(VS2019环境下)
C语言学习记录——调试技巧(VS2019环境下)
55 2
|
7月前
|
程序员 C语言 C++
C语言实用的调试技巧
C语言实用的调试技巧
52 3
|
6月前
|
程序员 编译器 C语言
C语言中的assert.h:调试助手与断言详解
C语言中的assert.h:调试助手与断言详解
|
7月前
|
程序员 编译器 测试技术
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
50 1