初衷
为了友好地调试ffmpeg,学习其中代码精华,梳理脉络,界面式的断点调试肯定是比较好的方法。
解决思路
(1)基于clion是跨平台的ide,可以让我们在window、mac、linux平台都可以统一使用,跳过各个平台的差异性。
(2)ffmpeg在各个平台也是有差异性的,为了避免这种差异性,采取docker容器的方式去隔离解决。
Dockerfile配置文件:
FROM ubuntu:14.04
#添加163源
ADD http://mirrors.163.com/.help/sources.list.trusty /etc/apt/sources.list
RUN apt-get update && apt-get upgrade -y && apt-get install -y \
apt-utils gcc g++ openssh-server cmake build-essential gdb gdbserver rsync vim python3 libc-dbg libpython3-stdlib libc6
ADD . /code
WORKDIR /code
# Taken from - https://docs.docker.com/engine/examples/running_ssh_service/#environment-variables
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
# 暴露端口 22 for ssh server. 7777 for gdb server.
EXPOSE 22 7777
RUN useradd -ms /bin/bash debugger
RUN echo 'debugger:pwd' | chpasswd
########################################################
# 安装需要的第三方库
########################################################
RUN apt-get install -y \
libz-dev libx264-dev libfdk-aac-dev liblzma-dev libxcb*
########################################################
CMD ["/usr/sbin/sshd", "-D"]
docker-compose.yml配置文件:
version: '3'
services:
gdbserver:
build: .
security_opt: # options needed for gdb debugging
- seccomp:unconfined
- apparmor:unconfined
container_name: debug
ports:
- "7776:22" # 映射本机7776端口为docker容器对应的22端口
- "7777:7777" # 映射本机7777端口为docker容器对应的7777端口
volumes:
- .:/code # 挂载当前工程目录对应为docker容器中的/code目录