Android 检查失败:接收器!=写入本地存储时为空PTR虚拟(SIGABRT)
我有办法Android 检查失败:接收器!=写入本地存储时为空PTR虚拟(SIGABRT),android,android-native-library,Android,Android Native Library,我有办法 fun generateIdentity(deviceId:String, environment: String) { val identity= Identity() identity.deviceId = deviceId identity.environment = environment AppLog.i(TAG, "generateIdentity()") if (!configDirectory.exists()
fun generateIdentity(deviceId:String, environment: String) {
val identity= Identity()
identity.deviceId = deviceId
identity.environment = environment
AppLog.i(TAG, "generateIdentity()")
if (!configDirectory.exists()) {
configDirectory.mkdirs()
}
val identityFile = File("$configDirectory/identity.json")
if (identityFile.exists()) {
identityFile.delete()
}
identityFile.createNewFile()
val jsonIdentity = GsonBuilder().setPrettyPrinting().create().toJson(identity)
try {
val buf = BufferedWriter(FileWriter(identityFile, true))
buf.append(jsonIdentity)
buf.newLine()
buf.close()
} catch (e: IOException) {
AppLog.e(TAG, e.printStackTrace().toString())
}
}
写入序列化对象的
class Identity{
@Expose
@SerializedName("device-id")
var deviceId: String = ""
@Expose
@SerializedName("environment")
var environment: String =""
}
以JSON文件的形式发送到本地存储
当在Gson构建过程中对identity对象调用.toJson()时,本机层中会发生崩溃,该层提供了一个非常长的以
03-09 14:20:08.416 7468-7468/ A/art: art/runtime/entrypoints/quick/quick_trampoline_entrypoints.cc:801] Check failed: receiver != nullptr virtual
以
03-09 14:20:08.799 7468-7468/? A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 7468 ()
没有生成墓碑。这是一段看似微不足道的代码,在过去一直有效,但不确定是什么变化导致了这种情况的发生。我如何调查造成这种情况的原因?我将整个序列化和文件写入过程放入一个如下的协同程序中:
val jsonCoversionResult: Deferred<String> = GlobalScope.async {
GsonBuilder()
.setPrettyPrinting()
.create()
.toJson(
identity)
}
runBlocking {
val jsonIdentity = jsonCoversionResult.await()
try {
val buf = BufferedWriter(FileWriter(identityFile, true))
buf.append(jsonIdentity)
buf.newLine()
buf.close()
} catch (e: IOException) {
AppLog.e(TAG, e.printStackTrace().toString())
}
}
val jsonversionresult:Deferred=GlobalScope.async{
GsonBuilder()
.setPrettyPrinting()
.create()
.toJson(
(身份)
}
运行阻塞{
val jsonIdentity=jsonVersionResult.await()
试一试{
val buf=BufferedWriter(FileWriter(identityFile,true))
buf.append(jsonIdentity)
buf.newLine()
buf.close()
}捕获(e:IOException){
AppLog.e(标记,例如printStackTrace().toString())
}
}
我写的是一个拥有专有硬件的AOSP版本,内存管理有时会因为一些我不理解的原因而变得很糟糕,但这确实奏效了