|
| 1 | +# rofi-debugging(5) |
| 2 | + |
| 3 | +## NAME |
| 4 | + |
| 5 | +Debugging rofi. |
| 6 | + |
| 7 | +When reporting an issue with rofi crashing, or misbehaving. It helps to do some |
| 8 | +small test to help pin-point the problem. |
| 9 | + |
| 10 | +First try disabling your custom configuration: `-no-config` |
| 11 | + |
| 12 | +This disables the parsing of the configuration files. This runs rofi in *stock* |
| 13 | +mode. |
| 14 | + |
| 15 | +If you run custom C plugins, you can disable the plugins using: `-no-plugins` |
| 16 | + |
| 17 | +## Get the relevant information for an issue |
| 18 | + |
| 19 | +Please pastebin the output of the following commands: |
| 20 | + |
| 21 | +```bash |
| 22 | +rofi -help |
| 23 | +rofi -dump-config |
| 24 | +rofi -dump-theme |
| 25 | +``` |
| 26 | + |
| 27 | +`rofi -help` provides us with the configuration files parsed, the exact |
| 28 | +version, monitor layout and more useful information. |
| 29 | + |
| 30 | +The `rofi -dump-config` and `rofi -dump-theme` output gives us `rofi` |
| 31 | +interpretation of your configuration and theme. |
| 32 | + |
| 33 | +Please check the output for identifiable information and remove this. |
| 34 | + |
| 35 | +## Timing traces |
| 36 | + |
| 37 | +To get a timing trace, enable the **Timings** debug domain. |
| 38 | + |
| 39 | +```bash |
| 40 | +G_MESSAGES_DEBUG=Timings rofi -show drun |
| 41 | +``` |
| 42 | +It will show a trace with (useful) timing information at relevant points during |
| 43 | +the execution. This will help debugging when rofi is slow to start. |
| 44 | + |
| 45 | +Example trace: |
| 46 | + |
| 47 | +```text |
| 48 | +(process:14942): Timings-DEBUG: 13:47:39.335: 0.000000 (0.000000): Started |
| 49 | +(process:14942): Timings-DEBUG: 13:47:39.335: 0.000126 (0.000126): ../source/rofi.c:main:786 |
| 50 | +(process:14942): Timings-DEBUG: 13:47:39.335: 0.000163 (0.000037): ../source/rofi.c:main:819 |
| 51 | +(process:14942): Timings-DEBUG: 13:47:39.336: 0.000219 (0.000056): ../source/rofi.c:main:826 Setup Locale |
| 52 | +(process:14942): Timings-DEBUG: 13:47:39.337: 0.001235 (0.001016): ../source/rofi.c:main:828 Collect MODI |
| 53 | +(process:14942): Timings-DEBUG: 13:47:39.337: 0.001264 (0.000029): ../source/rofi.c:main:830 Setup MODI |
| 54 | +(process:14942): Timings-DEBUG: 13:47:39.337: 0.001283 (0.000019): ../source/rofi.c:main:834 Setup mainloop |
| 55 | +(process:14942): Timings-DEBUG: 13:47:39.337: 0.001369 (0.000086): ../source/rofi.c:main:837 NK Bindings |
| 56 | +(process:14942): Timings-DEBUG: 13:47:39.337: 0.001512 (0.000143): ../source/xcb.c:display_setup:1177 Open Display |
| 57 | +(process:14942): Timings-DEBUG: 13:47:39.337: 0.001829 (0.000317): ../source/xcb.c:display_setup:1192 Setup XCB |
| 58 | +(process:14942): Timings-DEBUG: 13:47:39.346: 0.010650 (0.008821): ../source/rofi.c:main:844 Setup Display |
| 59 | +(process:14942): Timings-DEBUG: 13:47:39.346: 0.010715 (0.000065): ../source/rofi.c:main:848 Setup abe |
| 60 | +(process:14942): Timings-DEBUG: 13:47:39.350: 0.015101 (0.004386): ../source/rofi.c:main:883 Load cmd config |
| 61 | +(process:14942): Timings-DEBUG: 13:47:39.351: 0.015275 (0.000174): ../source/rofi.c:main:907 Setup Modi |
| 62 | +(process:14942): Timings-DEBUG: 13:47:39.351: 0.015291 (0.000016): ../source/view.c:rofi_view_workers_initialize:1922 Setup Threadpool, start |
| 63 | +(process:14942): Timings-DEBUG: 13:47:39.351: 0.015349 (0.000058): ../source/view.c:rofi_view_workers_initialize:1945 Setup Threadpool, done |
| 64 | +(process:14942): Timings-DEBUG: 13:47:39.367: 0.032018 (0.016669): ../source/rofi.c:main:1000 Setup late Display |
| 65 | +(process:14942): Timings-DEBUG: 13:47:39.367: 0.032080 (0.000062): ../source/rofi.c:main:1003 Theme setup |
| 66 | +(process:14942): Timings-DEBUG: 13:47:39.367: 0.032109 (0.000029): ../source/rofi.c:startup:668 Startup |
| 67 | +(process:14942): Timings-DEBUG: 13:47:39.367: 0.032121 (0.000012): ../source/rofi.c:startup:677 Grab keyboard |
| 68 | +(process:14942): Timings-DEBUG: 13:47:39.368: 0.032214 (0.000093): ../source/view.c:__create_window:701 xcb create window |
| 69 | +(process:14942): Timings-DEBUG: 13:47:39.368: 0.032235 (0.000021): ../source/view.c:__create_window:705 xcb create gc |
| 70 | +(process:14942): Timings-DEBUG: 13:47:39.368: 0.033136 (0.000901): ../source/view.c:__create_window:714 create cairo surface |
| 71 | +(process:14942): Timings-DEBUG: 13:47:39.369: 0.033286 (0.000150): ../source/view.c:__create_window:723 pango cairo font setup |
| 72 | +(process:14942): Timings-DEBUG: 13:47:39.369: 0.033351 (0.000065): ../source/view.c:__create_window:761 configure font |
| 73 | +(process:14942): Timings-DEBUG: 13:47:39.381: 0.045896 (0.012545): ../source/view.c:__create_window:769 textbox setup |
| 74 | +(process:14942): Timings-DEBUG: 13:47:39.381: 0.045944 (0.000048): ../source/view.c:__create_window:781 setup window attributes |
| 75 | +(process:14942): Timings-DEBUG: 13:47:39.381: 0.045955 (0.000011): ../source/view.c:__create_window:791 setup window fullscreen |
| 76 | +(process:14942): Timings-DEBUG: 13:47:39.381: 0.045966 (0.000011): ../source/view.c:__create_window:797 setup window name and class |
| 77 | +(process:14942): Timings-DEBUG: 13:47:39.381: 0.045974 (0.000008): ../source/view.c:__create_window:808 setup startup notification |
| 78 | +(process:14942): Timings-DEBUG: 13:47:39.381: 0.045981 (0.000007): ../source/view.c:__create_window:810 done |
| 79 | +(process:14942): Timings-DEBUG: 13:47:39.381: 0.045992 (0.000011): ../source/rofi.c:startup:679 Create Window |
| 80 | +(process:14942): Timings-DEBUG: 13:47:39.381: 0.045999 (0.000007): ../source/rofi.c:startup:681 Parse ABE |
| 81 | +(process:14942): Timings-DEBUG: 13:47:39.381: 0.046113 (0.000114): ../source/rofi.c:startup:684 Config sanity check |
| 82 | +(process:14942): Timings-DEBUG: 13:47:39.384: 0.048229 (0.002116): ../source/dialogs/run.c:get_apps:216 start |
| 83 | +(process:14942): Timings-DEBUG: 13:47:39.390: 0.054626 (0.006397): ../source/dialogs/run.c:get_apps:336 stop |
| 84 | +(process:14942): Timings-DEBUG: 13:47:39.390: 0.054781 (0.000155): ../source/dialogs/drun.c:get_apps:634 Get Desktop apps (start) |
| 85 | +(process:14942): Timings-DEBUG: 13:47:39.391: 0.055264 (0.000483): ../source/dialogs/drun.c:get_apps:641 Get Desktop apps (user dir) |
| 86 | +(process:14942): Timings-DEBUG: 13:47:39.418: 0.082884 (0.027620): ../source/dialogs/drun.c:get_apps:659 Get Desktop apps (system dirs) |
| 87 | +(process:14942): Timings-DEBUG: 13:47:39.418: 0.082944 (0.000060): ../source/dialogs/drun.c:get_apps_history:597 Start drun history |
| 88 | +(process:14942): Timings-DEBUG: 13:47:39.418: 0.082977 (0.000033): ../source/dialogs/drun.c:get_apps_history:617 Stop drun history |
| 89 | +(process:14942): Timings-DEBUG: 13:47:39.419: 0.083638 (0.000661): ../source/dialogs/drun.c:get_apps:664 Sorting done. |
| 90 | +(process:14942): Timings-DEBUG: 13:47:39.419: 0.083685 (0.000047): ../source/view.c:rofi_view_create:1759 |
| 91 | +(process:14942): Timings-DEBUG: 13:47:39.419: 0.083700 (0.000015): ../source/view.c:rofi_view_create:1783 Startup notification |
| 92 | +(process:14942): Timings-DEBUG: 13:47:39.419: 0.083711 (0.000011): ../source/view.c:rofi_view_create:1786 Get active monitor |
| 93 | +(process:14942): Timings-DEBUG: 13:47:39.420: 0.084693 (0.000982): ../source/view.c:rofi_view_refilter:1028 Filter start |
| 94 | +(process:14942): Timings-DEBUG: 13:47:39.421: 0.085992 (0.001299): ../source/view.c:rofi_view_refilter:1132 Filter done |
| 95 | +(process:14942): Timings-DEBUG: 13:47:39.421: 0.086090 (0.000098): ../source/view.c:rofi_view_update:982 |
| 96 | +(process:14942): Timings-DEBUG: 13:47:39.421: 0.086123 (0.000033): ../source/view.c:rofi_view_update:1002 Background |
| 97 | +(process:14942): Timings-DEBUG: 13:47:39.428: 0.092864 (0.006741): ../source/view.c:rofi_view_update:1008 widgets |
| 98 | +``` |
| 99 | + |
| 100 | +## Debug domains |
| 101 | + |
| 102 | +To further debug the plugin, you can get a trace with (lots of) debug |
| 103 | +information. This debug output can be enabled for multiple parts in rofi using |
| 104 | +the glib debug framework. Debug domains can be enabled by setting the |
| 105 | +G\_MESSAGES\_DEBUG environment variable. At the time of creation of this page, |
| 106 | +the following debug domains exist: |
| 107 | + |
| 108 | +- all: Show debug information from all domains. |
| 109 | +- X11Helper: The X11 Helper functions. |
| 110 | +- View: The main window view functions. |
| 111 | +- Widgets.Box: The Box widget. |
| 112 | +- Modes.DMenu: The dmenu mode. |
| 113 | +- Modes.Run: The run mode. |
| 114 | +- Modes.DRun: The desktop file run mode. |
| 115 | +- Modes.Window: The window mode. |
| 116 | +- Modes.Script: The script mode. |
| 117 | +- Modes.Combi: The script mode. |
| 118 | +- Modes.Ssh: The ssh mode. |
| 119 | +- Rofi: The main application. |
| 120 | +- Timings: Get timing output. |
| 121 | +- Theme: Theme engine debug output. (warning lots of output). |
| 122 | +- Widgets.Icon: The Icon widget. |
| 123 | +- Widgets.Box: The box widget. |
| 124 | +- Widgets.Container: The container widget. |
| 125 | +- Widgets.Window: The window widget. |
| 126 | +- Helpers.IconFetcher: Information about icon lookup. |
| 127 | + |
| 128 | +For full list see `man rofi`. |
| 129 | + |
| 130 | +Example: `G_MESSAGES_DEBUG=Dialogs.DRun rofi -show drun` To get specific output |
| 131 | +from the Desktop file run dialog. |
| 132 | + |
| 133 | +To redirect the debug output to a file (`~/rofi.log`) add: |
| 134 | + |
| 135 | +```bash |
| 136 | +rofi -show drun -log ~/rofi.log |
| 137 | +``` |
| 138 | + |
| 139 | +Specifying the logfile automatically enabled all log domains. |
| 140 | +This can be useful when rofi is launched from a window manager. |
| 141 | + |
| 142 | +## Creating a backtrace |
| 143 | + |
| 144 | +First make sure you compile **rofi** with debug symbols: |
| 145 | + |
| 146 | +```bash |
| 147 | +make CFLAGS="-O0 -g3" clean rofi |
| 148 | +``` |
| 149 | + |
| 150 | +Getting a backtrace using GDB is not very handy. Because if rofi get stuck, it |
| 151 | +grabs keyboard and mouse. So if it crashes in GDB you are stuck. The best way |
| 152 | +to go is to enable core file. (ulimit -c unlimited in bash) then make rofi |
| 153 | +crash. You can then load the core in GDB. |
| 154 | + |
| 155 | +```bash |
| 156 | +gdb rofi core |
| 157 | +``` |
| 158 | + |
| 159 | +Then type inside gdb: |
| 160 | + |
| 161 | +```bash |
| 162 | +thread apply all bt |
| 163 | +``` |
| 164 | + |
| 165 | +The output trace is useful when reporting crashes. |
| 166 | + |
| 167 | +Some distribution have `systemd-coredump`, this way you can easily get a |
| 168 | +backtrace via `coredumpctl`. |
| 169 | + |
| 170 | +## SEE ALSO |
| 171 | + |
| 172 | +rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), |
| 173 | +rofi-script(5), rofi-keys(5),rofi-theme-selector(1) |
| 174 | + |
| 175 | +## AUTHOR |
| 176 | + |
| 177 | + |
0 commit comments