개발, 웹, 블로그/GStreamer 상식

Gstreamer Plugin 개발시 Valgrind를 이용하기

삼성동고양이 2024. 7. 8. 13:40
반응형

Gstreamer launcher valgrind debugging

Gstreamer Plugin을 개발하다보면 Gstreamer 내에서의 메모리 관리와 작성하고자 하는 코드의 메모리 관리가 일관되지 못해 의도치 않은 Memory leak을 유발하는 경우가 많다. 이럴 경우 어디에서 Memory의 관리를 놓쳤는지 찾아야 하는데 Gstreamer launcher로 테스트를 할 경우 valgrind를 물리는 순간 정상 동작이 안되는 경우가 많다.

Intall Debug Symbol

Gstreamer


sudo apt install gstreamer1.0-*dbg gstreamer1.0-tools

glib


sudo apt install libglib2.0-0-dbg

Symbol을 설치하기 어려울 경우 아래와 같이 실행


echo "deb [http://ddebs.ubuntu.com](http://ddebs.ubuntu.com/) $(lsb_release -cs) main restricted universe multiverse deb [http://ddebs.ubuntu.com](http://ddebs.ubuntu.com/) $(lsb_release -cs)-updates main restricted universe multiverse deb [http://ddebs.ubuntu.com](http://ddebs.ubuntu.com/) $(lsb_release -cs)-proposed main restricted universe multiverse" | \ sudo tee -a /etc/apt/sources.list.d/ddebs.list

sudo apt install ubuntu-dbgsym-keyring

sudo apt update

sudo apt install libglib2.0-bin-dbgsym libglib2.0-0-dbgsym libglib2.0-dev-bin-dbgsym

Code를 Debugging 옵션으로 빌드


# In the following line:# --prefix /usr --libdir /usr/lib/aarch64-linux-gnu#     This is required when building GStreamer plug-ins. Other applications may ignore this#     Note that aarch64-linux-gnu is for AARCH64, change accordingly# CFLAGS#     If using C# CXXFLAGS#     If using C++

./configure --prefix /usr --libdir /usr/lib/aarch64-linux-gnu CFLAGS="-g -O0" CXXFLAGS="-g -O0"
make
sudo make install

Suppressions 파일 준비

Suppression은 Valgrind에서 특정 Leak에 대해서 제외하기 위해 사용되는 파일.

gst suppressions 파일

https://gitlab.freedesktop.org/gstreamer/common/-/blob/master/gst.supp

glib suppressions 파일

https://github.com/GNOME/glib/blob/main/tools/glib.supp

Valgrind 실행


G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind \
--leak-check=full --leak-resolution=high --num-callers=20 --trace-children=yes \
--suppressions=path/to/gst.supp \
--suppressions=path/to/glib.supp \
gst-launch-1.0 videotestsrc num-buffers=10 ! fakesinkz

출처

https://developer.ridgerun.com/wiki/index.php/How_to_Analyze_GStreamer_with_Valgrind

반응형