4

これはしばらく前から存在し、修正されたバグであることを私は知っています。しかし、私の状況は少し違うようです。ターミナル経由で gedit でテキスト ファイルを開くと、次のエラーが表示されます。

*** BUG ***
In pixman_region32_init_rect: Invalid rectangle passed
Set a breakpoint on '_pixman_log_error' to debug

テーマを切り替えてもエラーが発生しないため、テーマが原因であることはわかっています。しかし、私は自分のテーマが本当に好きで、変更したくありません。代わりに、エラーの原因となっている行を特定して修正したいと思います。しかし、私はそれについて正確にどうすればよいのかわかりません。Android では、adb logcat を実行するだけで、問題の原因を確認できます。しかし、私は Android ではなく、シナモン デスクトップを実行している Linux Mint 17.2 を使用しています。それで、私の質問は、どうすればこのエラーをログに記録したり、何らかの形で追跡したりできるでしょうか?

4

1 に答える 1

0

エラー メッセージが示すように、デバッガーを使用して、'_pixman_log_error' 関数にブレークポイントを設定する必要があります。Linux の標準デバッガーは gdb であり、完全なユーザー マニュアルはhttps://sourceware.org/gdb/current/onlinedocs/gdb/にあります。

特定のユースケースでは、実行中のプロセスにデバッガーをアタッチするのがおそらく最適なオプションです。これは、gdb を「gdb -p pid」として開始することで実行できます。ここで、pidはプロセス ID 番号です。次に、gdb コマンド プロンプトで「b _pixman_log_error」(_pixman_log_error にブレークポイントを設定) を入力し、続いて「c」(続行) を入力します。実行はブレークポイントに到達するまで続行され、gdb コマンド プロンプトに戻ります。次に、「bt」(スタック バックトレース) と入力すると、呼び出し元の関数チェーンが出力されます。

問題のプロセスがコンピュータでデスクトップ環境を実行するために重要である場合、それにアタッチするとシステムがフリーズするだけであることに注意してください。最良の方法は、別のコンピューター (ラップトップなど) を使用し、そこから ssh 経由でプライマリ コンピューターにログインすることです。その後、ssh セッションで gdb を実行できます。

于 2016-03-26T21:44:05.283 に答える