gpt4 book ai didi

c - 将 gdb 与 alsa-lib-1.1.3 一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:22 25 4
gpt4 key购买 nike

我正在尝试在下一个代码中将 gdb 与 alsa-lib 一起使用,我使用 gdb 来查看指针结构,但我发现了这个 <incomplete type>什么时候使用gdb

我将 gcc 用于编译器,并放置了一个标志 -lasound

 gcc ejemplo.c   -lasound  -g  -o ejemplo  

+

    #include <alsa/asoundlib.h>
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
//#include"pcm_local.h"
//#include <sound/asound.h>

int main()
{
snd_pcm_t *handle_capture;
snd_pcm_open(&handle_capture,"default", SND_PCM_STREAM_PLAYBACK, SND_PCM_ASYNC);
return 0;
}

我在第 15 行打断(在返回 0 之前)并看到这个

(gdb) break 15
(gdb) p *handle_capture
<incomplete type>

我看到 pcm.h 第 327 行的声明

typedef struct _snd_pcm snd_pcm_t

然后搜索 _snd_pcm,我在 "pcm_local.h" 中找到声明第 179 行

 struct _snd_pcm {

我添加了库,但出现错误或双重声明。

我还看到了 libasound.so 的声明

nm -D /usr/lib/x86_64-linux-gnu/libasound.so

但我没有找到声明(_snd_pcm 或 snd_pcm_t),看到我不知道如果在 libasond 中可以使用 gdb,所以不要出现这个声明。

我在其他帖子中读到,如果添加 #include <sound/asound.h> 问题就解决了但我发现双重声明的相同错误,我认为我解决了代码库 pcm_local.h 中双重声明注释部分的错误,但我不知道这是否是一个好的解决方案,任何人都可以帮助我,我需要什么知道使用 gdb whith alsa 吗?我在谷歌 (Googlear) 中搜索了任何解决方案,但我没有找到任何解决方案。

最佳答案

您的程序不包含 pcm_local.h。您正在使用的指针旨在用作不透明指针。供应用程序使用的包含文件只有一个前向声明。您的应用程序应该将其视为句柄,类似于 FILE *

您可能真的不想知道它指向什么。如果你这样做,你必须确保你的 alsa 库编译时附加了调试信息(而不是剥离),并且你必须足够深入地进入 alsa 库函数,直到你到达确实 包含 pcm_local.h

是的,有一些方法可以包含结构定义并让 gdb 为您取消引用指针。但那是疯狂的方式。欺骗调试器做某事是伪装自己的好方法。

如果您真正感兴趣的是 alsa 句柄状态的某些方面,请查找报告其状态的函数。

关于c - 将 gdb 与 alsa-lib-1.1.3 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42730380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com