ابزار های عیب برداری

راه های مختلفی برای خراب کردن Jami از دیدگاه توسعه دهنده وجود دارد، بسته به آنچه می خواهید خراب کنید.

چوبداران

The first way is to use runtime loggers. Starting jami with -d will enable logging by the daemon (or the Troubleshoot section in the General settings). Because Jami uses several libraries, we do not enable all logs by default. But you can pass some environment variables to show it:

  • SIPLOGLEVEL=5 برای فعال کردن سوابق از PJSIP.

  • DHTLOGLEVEL=5 برای فعال کردن دفترچه ها از OpenDHT.

  • AVLOGLEVEL=50 برای فعال کردن سوابق از ffmpeg.

بازیافت کننده

Generally your IDE has an embedded debugger. Else, you can use gdb for example to be able to add breakpoints, backtraces from crashes, print internal structures, etc. You need to compile the project in DEBUG mode to get debug symbols.

چند دستور مفيد:

  • b file.cpp:line - یک نقطه شکافی اضافه کنید (file.cpp:line می تواند با یک نماد جایگزین شود)

  • t a a bt - (درد تمام ردیابی عقب را اعمال می کند) برای گرفتن تمام ردیابی عقب

  • Ctrl + X / A - عبور در نمای گرافیکی

  • p - یک مقدار داخلی چاپ کنید.

Note: VSCode is fully supported by Jami and can be used to debug the project.

پروفایل ها

اشکال زدایی ها مفید هستند، اما مصرف حافظه / فعالیت شبکه / استفاده از CPU را در زمان واقعی نشان نمی دهند. برای این کار، می توانید از پروفایلر داخلی در IDE خود (به عنوان مثال از Android Studio یا Qt Creator / Visual Studio) استفاده کنید.

آدرس سینیتیزر

این می تواند برای تشخیص لکه ها، تصادف ها، وقفه های احتمالی در زمان اجرا مفید باشد. برای این کار، می توانید دیمون را با CXXFLAGS+="-fsanitize=address" مرتب کنید. پرچم های دیگر مانند tsan ممکن است مفید باشند.

والگرند/کالگرند

Valgrind یک ابزار برای نظارت بر تخصیصات، استفاده از پردازنده و موارد دیگر است و می تواند از طریق: valgrind --tool=callgrind./jami -d استفاده شود. این امر برنامه را بسیار کند می کند اما می تواند گزارش های مفید در مورد تخصیص حافظه / استفاده از عملکرد را ارائه دهد (KCacheGrind می تواند برای خواندن گزارش ها استفاده شود).

آزمایشات

Daemon دارای آزمایشات و پوشش های بسیاری است. اگر Daemon در حالت جامد ساخته شده باشد (نمادهای خصوصی دیگر در دسترس نخواهد بود) ، اضافه کردن آزمایش های جدید می تواند به تولید اشکال، حل اشکال و جلوگیری از هر گونه بازگشت کمک کند. (بخش daemon/tests/unitTests`)

مامور

آزمایش ها فقط با استفاده از یک دیمون برای شبیه سازی هر دو همسال می باشد. بنابراین آزمایش در محیط های مختلف می تواند دشوار باشد. امکان دیگری نوشتن یک سناریو و اجرا یک عامل است (توثقیه در مخزن دیمون موجود است).

LTTng

در نهایت، ردیابی نقاط می تواند ایجاد و تجزیه و تحلیل شود. daemon/tools/trace اسناد و برخی نمونه ها را ارائه می دهد. مزیت LTTng این است که سریعتر از لوگ است، می تواند توسط رویدادهای سیستم ایجاد شود و می تواند با ردیابی نقاط موجود در هسته استفاده شود (تا بتواند با ردیابی نقاط از رابط های شبکه استفاده شود).

آزمایشات

Both clients and daemon have tests. Daemon's tests are written in C++ and use the cppunit framework. They are located in the daemon/tests directory.