4

我知道这是一个已经存在一段时间并已修复的错误。但我的情况似乎有点不同。当我通过终端在 gedit 中打开一个文本文件时,我收到此错误:

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

我知道这是因为我的主题,因为我在切换主题时没有收到错误消息。但我真的很喜欢我的主题,不想改变它。相反,我想弄清楚是什么或哪些行导致了错误,并纠正它们。但是,我不知道具体该怎么做。在 Android 中,我可以简单地运行 adb logcat,看看是什么导致了问题。但我不在 Android 上,我在运行 cinnamon 桌面的 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 从它登录到您的主计算机。然后 gdb 可以在 ssh 会话中运行。

于 2016-03-26T21:44:05.283 回答