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

标签 c linux gdb alsa

我正在尝试在下一个代码中将 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/

相关文章:

c# - 如何更改 Windows 程序中的主机文件?

c - 与井字游戏斗争

linux我怎么学呢?管理/用户

c - GDB 函数参数条件中断

c++ - 调试从 Python 调用的 C++ 代码中的段错误

c - 用指针访问零位

c - (int *)0是空指针吗?

linux - 在 wget 中转义 @ 以进行 FTP 登录

linux - Ubuntu 上新用户的权限问题

C编程gdb报错信息