今天无意重启了一下系统,再打开 Synergy 就直接崩溃,重装后打开还是崩。
查看日志有以下信息:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000010
Exception Note: EXC_CORPSE_NOTIFY
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [0]
日志表明内存访问错误,原因可能有多种,因为之前是正常使用了很久,系统版本, 应用版本都没有变化,所以原因肯定不在系统和应用程序本身,可能下面两个原因:
- 配置文件保存失败或者格式有误,应用在启动的时候没有做好容错处理
- 应用退出保存的运行数据有问题,应用在重新打开时会去读取已经存在的运行数据导致崩溃
事先查了一下网上解决这个问题的方法基本就是卸载重装,但是并不能解决这个问题。 因为卸载的时候不一定能该应用的配置文件和运行数据被移除干净,特别是在 mac 系统, 从 applications 中卸载应用也就是把应用相关的安装程序文件家移除了,配置文件和运行数据压根就不会动。
所以最关键的是找到该应用启动的时候打开了哪些配置和数据文件,有以下以下三种方法:
-
查看 mac 系统中该应用的配置文件和运行数据的路径,配置文件一般会在用户目录下,而数据文件会在 用户目录下的 Library/Saved Application State/ 里
-
如果奔溃的进程还存在,通过以下两种方法查看锁打开的文件
mac的进程崩溃后,有些时候并没有退出,所以才能查看该进程的信息
-
通过“活动监视器”查看打开的文件
活动监视器 -> 搜索找到对应进程 -> 双击弹出进程的详细信息 -> 点击“打开的文件和端口”
可以看考类似以下的信息,第一行就是 Synergy 保存的运行数据:
... /Users/dongya/Library/Saved Application State/synergy.savedState/data.data /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Resources/Extras2.rsrc /System/Library/Frameworks/CoreImage.framework/Versions/A/Resources/ci_kernels.metallib /private/var/folders/q4/hbvrj59n1ps_h9q30hcfpq_00000gn/C/synergy/com.apple.metal/libraries.maps /private/var/folders/q4/hbvrj59n1ps_h9q30hcfpq_00000gn/C/synergy/com.apple.metal/libraries.data ...
-
通过 lsof -p 命名查看打开的文件
➜ /var lsof -p 1664 COMMAND PID USER NAME synergyc 1664 dongya / synergyc 1664 dongya /Applications/Synergy.app/Contents/MacOS/synergyc synergyc 1664 dongya /private/var/db/timezone/tz/2018e.1.0/icutz/icutz44l.dat synergyc 1664 dongya /System/Library/Caches/com.apple.IntlDataCache.le.kbdx synergyc 1664 dongya /usr/share/icu/icudt59l.dat synergyc 1664 dongya /System/Library/CoreServices/SystemAppearance.bundle/Contents/Resources/SystemAppearance.car synergyc 1664 dongya /private/var/folders/q4/hbvrj59n1ps_h9q30hcfpq_00000gn/0/com.apple.LaunchServices-221-v2.csstore synergyc 1664 dongya /System/Library/Keyboard Layouts/AppleKeyboardLayouts.bundle/Contents/Resources/AppleKeyboardLayouts-L.dat synergyc 1664 dongya /usr/lib/dyld synergyc 1664 dongya /private/var/db/dyld/dyld_shared_cache_x86_64h synergyc 1664 dongya ->0xea113beb9b79d7b9 synergyc 1664 dongya ->0xea113beb9b79e179 synergyc 1664 dongya ->0xea113beb9b79c2b9 synergyc 1664 dongya /Users/dongya/Library/Saved Application State/synergy.savedState/data.data synergyc 1664 dongya /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Resources/Extras2.rsrc
-
-
查看崩溃日志看是否能找到一些文件路径
通过上面方法找出相关的文件,可以修复就修复,不能修复直接删除,再重装的对应的应用即可。