debug-vscode调试方法

debug - vscode gdb调试指南


前言

参考:VSCode C/C++(gdb)调试指南

命令参考:
https://www.cnblogs.com/chengliangsheng/p/3597010.html

一、调试代码

 
 
#include <stdio.h>
 
#include <malloc.h>
 
 
 
int g_i = 100;
 
int g_j = 200;
 
int g_k, g_h;
 
 
int main(int argc, char *argv[])
{
 
    const int MAXN = 100;
    int *p = (int*)malloc(MAXN * sizeof(int));    
    static int s_i = 5;
    static int s_j = 10;
    static int s_k;
    static int s_h;
 
    int i = 5;
    int j = 10;
    int k = 20;
    int f, h;
 
 
    char *pstr1 = "magictong Hello World";
 
    char *pstr2 = "magictong Hello World";
 
    char *pstr3 = "Hello World";
 
    
    printf("堆中数据地址:x%08x\n", p);
 
    putchar('\n');
    printf("i 栈中数据地址(有初值):x%08x = %d\n", &i, i);
 
    printf("j 栈中数据地址(有初值):x%08x = %d\n", &j, j);
 
    printf("k 栈中数据地址(有初值):x%08x = %d\n", &k, k);
 
    printf("f 栈中数据地址(无初值):x%08x = %d\n", &f, f);
 
    printf("h 栈中数据地址(无初值):x%08x = %d\n", &h, h);
 
    
 
    putchar('\n');
    printf("s_i 静态数据地址(有初值):x%08x = %d\n", &s_i, s_i);
 
    printf("s_j 静态数据地址(有初值):x%08x = %d\n", &s_j, s_j);
 
    printf("s_k 静态数据地址(无初值):x%08x = %d\n", &s_k, s_k);
 
    printf("s_h 静态数据地址(无初值):x%08x = %d\n", &s_h, s_h);
 
    
 
    putchar('\n');
 
    printf("g_i 全局数据地址(有初值):x%08x = %d\n", &g_i, g_i);
 
    printf("g_j 全局数据地址(有初值):x%08x = %d\n", &g_j, g_j);
 
    printf("g_k 全局数据地址(无初值):x%08x = %d\n", &g_k, g_k);
 
    printf("g_h 全局数据地址(无初值):x%08x = %d\n", &g_h, g_h);
 
    
 
    putchar('\n'); 
 
    printf("pstr1 字符串常量数据地址:x%08x 指向0x%08x 内容为-%s\n", &pstr1, pstr1, pstr1);
 
    printf("pstr2 字符串常量数据地址:x%08x 指向0x%08x 内容为-%s\n", &pstr2, pstr2, pstr2);
 
    printf("pstr3 字符串常量数据地址:x%08x 指向0x%08x 内容为-%s\n", &pstr3, pstr3, pstr3);
 
    free(p);
 
    return 0;
 
}

二、命令

查看main反汇编

-exec disassemble /m main
在这里插入图片描述

查看寄存器

-exec info r
在这里插入图片描述

打印某个变量

-exec print s 或者 --s
在这里插入图片描述

打印寄存器,如pc

-exec print $pc
在这里插入图片描述

打印当前函数栈信息(当前执行位置)

-exec bt 或 -exec info f
在这里插入图片描述

打印程序栈局部变量

-exec info local
在这里插入图片描述

x命令的语法如下所示:

x/ n、f、u是可选的参数。

n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。

f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。

u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。

u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。

当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

表示一个内存地址。n/f/u三个参数可以一起使用。例如:
命令:x/3uh 0x54320表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。
在这里插入图片描述

16进制格式化打印16个单位的

-exec x/16x 0x5ffe60

打印某变量地址

-exec p &buff
在这里插入图片描述

### 使用 Stable Diffusion 模型生成视频的方法 为了利用 Stable Diffusion 模型创建视频内容,通常会采用一系列特定的技术流程来实现这一目标。以下是具体方法: #### 准备工作环境 确保安装并配置好必要的软件包和工具链。这包括但不限于 PyTorch 和 Hugging Face 的 Diffusers 库[^2]。 ```bash pip install torch torchvision torchaudio diffusers transformers accelerate safetensors ``` #### 加载预训练模型 通过调用 `diffusers` 中提供的 API 来加载预先训练好的 Stable Diffusion 模型实例。这些模型能够执行基于文本到图像或多帧序列的任务转换。 ```python from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler import torch model_id = "runwayml/stable-diffusion-v1-5" pipeline = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda") pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config) ``` #### 定义动画参数 设置用于控制视频合成的关键变量,比如帧率、持续时间以及每秒产生的图片数量等属性。此外还需要定义场景之间的过渡效果和平滑度选项。 ```python num_inference_steps = 50 # 推理步数 guidance_scale = 7.5 # 创意指导强度 video_length_seconds = 8 # 输出视频长度(秒) frames_per_second = 24 # 帧速率 (FPS) total_frames = int(video_length_seconds * frames_per_second) ``` #### 创建连续帧序列 对于每一帧都应用相同的 prompt 或者动态调整 prompts 来构建连贯的故事线。可以引入一些变化因素使相邻两帧之间存在差异从而形成流畅的动作感。 ```python prompts = ["A beautiful landscape at sunrise"] * total_frames for i in range(total_frames): if i % 10 == 0 and i != 0: new_prompt = f"A beautiful landscape with {i//10} birds flying over it." prompts[i:] = [new_prompt]*(total_frames-i) images = [] for frame_idx in range(total_frames): image = pipeline(prompts[frame_idx], num_inference_steps=num_inference_steps, guidance_scale=guidance_scale).images[0] images.append(image) ``` #### 合成最终视频文件 最后一步就是把所有的静态图象拼接起来成为一个完整的 MP4 文件或者其他格式的多媒体资源。可借助第三方库如 moviepy 实现此操作。 ```python from moviepy.editor import ImageSequenceClip clip = ImageSequenceClip(images, fps=frames_per_second) output_video_path = "./generated_video.mp4" clip.write_videofile(output_video_path, codec="libx264", audio=False) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值