我在 Vala 应用程序中使用 Glib.Settings。我想确保即使架构或密钥不可用,我的程序也能正常工作。所以我添加了一个 try/catch 块,但是如果我使用不存在的密钥,程序就会出现段错误。据我了解,它甚至没有到达 catch 语句。这是使用设置的函数:
GLib.Settings settings;
string token = "";
try
{
settings = new GLib.Settings (my_scheme);
token = settings.get_string("token1");
}
catch (Error e)
{
print("error");
token = "";
}
return token;
Run Code Online (Sandbox Code Playgroud)
程序输出为:
(main:27194): GLib-GIO-ERROR **: Settings schema 'my_scheme' does not contain a key named 'token1'
Trace/breakpoint trap (core dumped)
Run Code Online (Sandbox Code Playgroud)
(当然我使用的是我真正的方案字符串而不是 my_scheme)那么你能建议我哪里错了吗?
中的方法GLib.Settings,包括get_string不抛出异常,它们abort在库内部调用。这不是一个理想的设计,但您对此无能为力。
在这种情况下,正确的做法是修复您的架构,安装到该目录/usr/share/glib-2.0/schemas并在该目录上运行glib-compile-schemas(以 root 身份)。
Vala 仅具有检查异常,因此与 C# 不同,方法必须声明它将抛出,否则不可能这样做。您始终可以仔细检查 Valadoc 或 VAPI 来查看。