rofi-debugging(5) راهنمای قالب‌های فایل rofi-debugging(5)

rofi-debugging - راهنمای اشکال‌زدایی و عیب‌یابی rofi

هنگام گزارش مشکلی مانند فروپاشی یا رفتار نادرست در rofi، انجام چند آزمایش کوچک برای مشخص کردن دقیق ریشه مشکل سودمند خواهد بود.

نخست پیکربندی سفارشی خود را غیرفعال کنید: -no-config

این گزینه پردازش فایل‌های پیکربندی را غیرفعال می‌کند و rofi را در حالت پایه (stock) اجرا می‌نماید.

اگر از افزونه‌های سفارشی به زبان C استفاده می‌کنید، می‌توانید آن‌ها را با این گزینه غیرفعال کنید: -no-plugins

لطفاً خروجی دستورات زیر را در یک سرویس pastebin قرار دهید:

rofi -help
rofi -dump-config
rofi -dump-theme
دستور rofi -help اطلاعاتی شامل فایل‌های پیکربندی پردازش‌شده، نسخه دقیق، چیدمان مانیتور و اطلاعات مفید دیگری را فراهم می‌کند.
خروجی دستورات rofi -dump-config و rofi -dump-theme تفسیر rofi از پیکربندی و پوسته شما را نمایش می‌دهد.

لطفاً خروجی را برای اطلاعات شناسایی شخصی بررسی کرده و در صورت وجود آن‌ها را حذف کنید.

برای دریافت ردیابی زمان‌بندی، دامنه اشکال‌زدایی Timings را فعال کنید.

G_MESSAGES_DEBUG=Timings rofi -show drun

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

نمونه ردپای زمان‌بندی:

(process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started
(process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 
(process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 
(process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale
(process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI
(process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI
(process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop
(process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings
(process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display
(process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB
(process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display
(process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe
(process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config 
(process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi
(process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start
(process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done
(process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display
(process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup
(process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup
(process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard
(process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window
(process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc
(process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface
(process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup
(process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font
(process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup
(process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes
(process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen
(process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class
(process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification
(process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done
(process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window
(process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE
(process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check
(process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start
(process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop
(process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start)
(process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir)
(process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs)
(process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history
(process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history
(process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done.
(process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 
(process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification
(process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor
(process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start
(process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done
(process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 
(process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background
(process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets

برای اشکال‌زدایی بیشتر افزونه، می‌توانید ردیابی با اطلاعات اشکال‌زدایی (فراوان) دریافت کنید. این خروجی اشکال‌زدایی می‌تواند برای بخش‌های مختلفی در rofi با استفاده از چارچوب اشکال‌زدایی glib فعال شود. دامنه‌های اشکال‌زدایی با تنظیم متغیر محیطی G_MESSAGES_DEBUG فعال می‌گردند. در زمان نگارش این صفحه، دامنه‌های اشکال‌زدایی زیر وجود دارند:

•
all: نمایش اطلاعات اشکال‌زدایی از تمام دامنه‌ها.
•
X11Helper: توابع کمکی X11.
•
View: توابع نمای پنجره اصلی.
•
Widgets.Box: ویجت جعبه (Box).
•
Modes.DMenu: حالت dmenu.
•
Modes.Run: حالت run.
•
Modes.DRun: حالت اجرای فایل‌های دسکتاپ (desktop file).
•
Modes.Window: حالت پنجره (window).
•
Modes.Script: حالت اسکریپت.
•
Modes.Combi: حالت ترکیبی (combi).
•
Modes.Ssh: حالت ssh.
•
Rofi: برنامه اصلی.
•
Timings: دریافت خروجی زمان‌بندی.
•
Theme: خروجی اشکال‌زدایی موتور پوسته (هشدار: حجم خروجی بالا است).
•
Widgets.Icon: ویجت آیکون.
•
Widgets.Box: ویجت جعبه.
•
Widgets.Container: ویجت دربرگیرنده (Container).
•
Widgets.Window: ویجت پنجره.
•
Helpers.IconFetcher: اطلاعات مربوط به یافتن و واکشی آیکون‌ها.

برای فهرست کامل man rofi را ببینید.

مثال: G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun برای دریافت خروجی اختصاصی از کادر گفتگوی اجرای فایل دسکتاپ.

برای تغییر مسیر خروجی اشکال‌زدایی به یک فایل (~/rofi.log) اضافه کنید:

rofi -show drun -log ~/rofi.log

مشخص کردن فایل گزارش به طور خودکار تمام دامنه‌های لاگ را فعال می‌کند. این مورد هنگام راه‌اندازی rofi از یک مدیر پنجره می‌تواند سودمند باشد.

ابتدا اطمینان حاصل کنید که rofi را با نمادهای اشکال‌زدایی کامپایل کرده‌اید:

make CFLAGS="-O0 -g3" clean rofi

دریافت ردگیری به عقب (backtrace) با استفاده از GDB چندان راحت نیست، زیرا اگر rofi گیر کند، صفحه‌کلید و ماوس را به انحصار خود درمی‌آورد. بنابراین اگر درون GDB فروپاشد، کنترل سیستم قفل می‌شود. بهترین راهکار فعال‌سازی فایل گزارش هسته (core file) است. (دستور ulimit -c unlimited در bash) و سپس ایجاد شرایط فروپاشی rofi. پس از آن می‌توانید فایل هسته (core) را در GDB بارگذاری نمایید:

gdb rofi core

سپس درون gdb تایپ کنید:

thread apply all bt

خروجی ردگیری هنگام گزارش فروپاشی‌ها بسیار کارآمد است.

برخی توزیع‌ها دارای systemd-coredump هستند؛ از این طریق می‌توانید به آسانی از طریق coredumpctl یک backtrace دریافت کنید.

rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-keys(5), rofi-theme-selector(1)

•
Qball Cow qball@blame.services
rofi