2019-10-30 (We) [長年日記]
_ wayfire デバッグしてみた
android studio を起動すると必ず落ちるので、デバッグしてみた。
C++ って難しいなぁ。なんでメンバ関数のポインタが得られないんだろう? vtable が壊れて nullptr になってないかを知りたかっただけなんだけど、 そんなことできないのな。
そして systemd も難しくて、 リモートからログインして wayfire を起動しようとしてもできない。 seat_id が得られないからだそうな。 つまりログインした tty しか使わせてくれない、と。
まぁ tty の件は gdb で attach できたからいいけど。
でも gdb で C++ のコードをどうやってデバッグするのかわからなかった。
変数の値が表示できない。std::string
型の変数の値って、どうやって表示するの?
C ならわかるんだけど…
fprintf を突っ込みまくってどこで落ちてるかを調べたところ、
std::vector
の front()
メソッドっぽかった。
printf デバッグ最強伝説再び。
ぐぐったところ、このメソッドは参照を返すのね。 参照は nullptr にはなれないので、つまり、もし空だったら何かおかしなことになる、 ということ。
どうおかしな動きをしてたのかは結局わからなかったけど、
そこまでデバッグした時点で、空 vector になってるらしいことは判っていたので、
empty()
でチェックして true だった場合の処理を入れて解決した。
https://github.com/masm11/wayfire/commit/fd860ea0ae0229f4ec1996da31e23a260ac9bed5
解決後、最初に表示されたのが android studio の splash window だったので、 そういう特殊なことをしてるウィンドウの場合に該当してしまったのだろう。 たぶん、そんな珍しいウィンドウについてはテストしてなかったに違いない。
_ firefox CSD を有効にしてみた
firefox の CSD (client side decoration) を有効にしてみた。
このチェックを外して firefox を再起動するだけ。
タイトルバーが消える。タブバーがタイトルバーの役割も担うことになる。