Android Studio art

Android Studio art,第1张

调试一个NDK项目,希望从java层把文件路径传给native层,再从native层打开文件 。发现在Native层C代码设置断点用Android7.0的虚拟机调试正常,而用Android10的虚拟调试断点会失效,而重启电脑后,断点又正常。

已经做的配置如下:

1、RUN——edit configurations——app——debugger: debug type 选择Auto,官网显示,对于native的调试,auto 和dual都是可以的。https://developer.android.google.cn/studio/debug

2、参照官网说明,检查设备是否支持run-as 和ptrace,正常。

3、对虚拟机进行WipeData和Code boot都尝试过。

 再仔细查看调试信息,发现有报错信息:

art_sigsegv_fault 0x00000000e8ae4a00
art::FaultManager::HandleFault(int, siginfo*, void*) 0x00000000e8ae4fa4
art::art_fault_handler(int, siginfo*, void*) (.llvm.5767799722020299202) 0x00000000e8ae4ccb
___lldb_unnamed_symbol25$$app_process32 0x0000000058cc3fe1
___lldb_unnamed_symbol2$$libc.so 0x00000000e9ed8180
art::Thread::DecodeJObject(_jobject*) const 0x00000000e8e8adc0
 0x00000000ea01005d
 0x0000000058cc2000
....

 再搜索发现在stackoverflow上有人遇到过同样的问题,说是由jstring引起的。https://stackoverflow.com/questions/69329755/android-studio-art-sigsegv-fault-when-debugging-native-methods-that-receive-a-js#

于是退而求其次,因为java层没有const char *的类型,采用的方法是:在JNI函数中直接用const char *方式写入文件路径,不再从Java层向native传路径,不算很丝滑,至少能解决断点可用的问题。

至于,为什么Android7的虚拟机就没有这个问题,为什么重启电脑会暂时解决问题,暂时没有答案,欢迎小伙伴们一直探讨。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/920204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存