为什么设置G_DEBUG =致命警告不会导致使用GLib的应用在Android上中止?

问题描述

背景:我正在将使用GStreamer的WebRTC模块的纯Android示例应用程序(找到here)转换为Xamarin。正如预期的那样,我要转换的纯JAVA示例应用程序运行良好。但是,当将代码移植到Xamarin时,我遇到了许多GLib断言失败,这些失败使我困惑了一两天。经过几次尝试,我现在的最后选择是在调试器发生时进入调试器,以便我可以开始理解它们的性质。

我收到的消息是:

  • g_error_new_literal:断言'message!= NULL'失败
  • g_error_free:断言“错误!= NULL”失败

此外,此消息还散布在断言失败中(我认为这是最终的罪魁祸首):

不支持从字符集“ en-US”到“ UTF-8”的转换

问题:因此,经过大量阅读,我了解到GLib具有中止断言失败的能力(来自herehere和{{3 }}。问题是,使用

运行应用程序
setenv("G_DEBUG","fatal-criticals",1);

setenv("G_DEBUG","fatal-warnings",1);
从JNI_Load的第一行执行

....根本不会导致应用程序终止或中断。实际上,从Visual Studio调试器运行时,一切正常进行。我想念什么吗?是否需要在gbd下运行该应用程序才能终止该应用程序,还是可以仅通过Visual Studio运行该应用程序并期望它对我造成破坏?

谢谢。

解决方法

我怀疑GLib会在加载后立即读取该环境变量,因此您可能为时已晚,无法对其生效。尝试在已经启动的环境中在G_DEBUG=fatal-warnings上运行程序。

(您无需使用调试器即可使该设置生效。)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...