Android studio 如何逐行调试Android Studio项目(使用NDK和JNI)以查看工作流?

Android studio 如何逐行调试Android Studio项目(使用NDK和JNI)以查看工作流?,android-studio,debugging,android-ndk,java-native-interface,Android Studio,Debugging,Android Ndk,Java Native Interface,我使用的是VisualStudio,它的调试机制对我来说非常有用。在一个项目中有许多头文件和C文件,只需一个简单的F10,我就可以从main()函数的开头开始浏览,这样我就可以看到正在执行的代码的顺序 现在我跳进Android工作室,从一个使用NDK,JNI(这个项目为例)的项目开始,它让我感到困惑,因为有很多.java文件和其他C++(本地代码)文件,我不知道从哪个文件开始执行哪个文件以及它是如何运行的。 我的问题是:我正在寻找一种从一开始就在Android Studio中逐行调试的方法查看其

我使用的是VisualStudio,它的调试机制对我来说非常有用。在一个项目中有许多头文件和C文件,只需一个简单的F10,我就可以从main()函数的开头开始浏览,这样我就可以看到正在执行的代码的顺序

现在我跳进Android工作室,从一个使用NDK,JNI(这个项目为例)的项目开始,它让我感到困惑,因为有很多.java文件和其他C++(本地代码)文件,我不知道从哪个文件开始执行哪个文件以及它是如何运行的。 我的问题是:我正在寻找一种从一开始就在Android Studio中逐行调试的方法查看其工作流程就像Visual Studio那样,但我从搜索中得到的只是调试时如何从断点开始

我已尝试将断点放在启动程序活动的
onCreate()
方法中,并使用
F8
单步执行
F7
单步执行
,但它没有像我预期的那样工作。它将我带入超级类<代码>活动。java < /C>和<代码> GLUSAFAVEVIEW.java < /C> >,而不是把我带到C++代码中。在Android Studio中有什么方法可以做到这一点吗?如何做到


我尝试过其他项目,但问题仍然是一样的。希望有人能帮忙。

这不会发生。您的应用程序(Java样板代码)设置为响应用户使用应用程序和安装应用程序的设备时发生的许多系统事件。如果C++代码是单链的直接算法,可以在开始时设置S断点,并真正遵循一步一步。但对于Android Studio,即使是这个过程也不像Vusial Studio那么容易。首先,它总是远程调试,依赖于微妙的通信协议


也就是说,您可以尝试将Microsoft Visual Studio设置为调试本机Android代码的IDE。它令人惊讶地强大,而且您可能更熟悉它

既然你问过Android Studio,我会回答这个问题-我不熟悉Visual Studio for Android,也许它更适合你的要求


在Android studio中,这样的调试是非常困难的——尽管有些人说他们设法让它工作了,但我没能。特别是在复杂的环境中。所以,我正在做的是广泛的日志记录,尽可能多的细节,和可视化调试-在屏幕上放置一些文本视图,并用您需要的信息更新它。在某些情况下,这可能相当强大。或者,根据您定义的某些条件,在ui或场景中进行一些更改,以便可以看到视觉效果。同样,它没有调试有用,但仍然非常强大。

您是如何构建本机库的?一个小片段会很有帮助。@Moved,上面的项目中已经设置好了所有内容。我所要做的就是使用SDK管理器安装CMake、NDK和LLBD。安装完所有这些组件后,项目就可以运行了。更多信息可以在这里找到:非常感谢您的回复。然而,我正在进行的项目有点复杂。它包含java代码的平均数量和一组C++代码(比如40 .CPP和.h文件),通过JNI调用,是否可以用VisualStudio调试这个项目?顺便问一下,有没有其他方法可以使用Android Studio查看工作流?或者唯一的方法是从一开始就逐行读取代码?我不认为40个文件会给Visual Studio带来很大的压力。通过JNI调用会带来更严重的挑战:它们基本上破坏C++执行的流程,在java和C++之间切换调试上下文并不十分容易。我建议更多地依赖于“传统”调试器中可以遵循的独立测试,而较少依赖于调试乱七八糟的Android APK。由于交叉编译器和远程调试通常都是这样,如果您可以创建可以在Windows上的VS中调试的重要测试,您的生活会更轻松,只有当你的内核完全可靠时,才可以使用Android,只需担心胶水代码和依赖系统的工作流。谢谢你的回复,非常有用的提示。顺便问一下,应用程序运行后,编译器从哪里开始?如果我一开始就知道它从哪里开始,我会更容易理解。你问的不是很清楚-你想知道你可以把日志放在哪里的第一点吗?JAVAC++?我想从头开始看代码,看看怎么走。因此,我的意思是编译器在运行它的同时从哪里开始。例如,在C++中,它总是从()/>代码>函数开始。在C++独立程序中,它是“主”,但在JNI上,如果实现它,则是JNIYON Load。在Android的Java上,您使用的是SDK类和基础设施,因此您看不到起点。基本上,onCreate应用程序类是您的起点。也看看这里:谢谢,我现在拿到了。然后我将尝试使用
onCreate
函数。顺便问一下,你是在使用facebook、LINE还是我可以联系到的东西?你对我很好,我只是想交个朋友:)