我正在开发一种使用ARM Neon指令的算法。我正在使用汇编程序文件(.S而不是内联的asm)编写代码。
我的问题是,什么是最好的调试目的,即查看寄存器,内存等。目前,我正在使用Android NDK编译,我的安卓手机运行的算法。
发布于 2015-04-29 08:12:23
可怜人的调试解决方案。
您可以使用gdb / gdbserver远程控制安卓手机上应用程序的执行。我在这里不提供全部细节,因为它们总是在变化,但是,例如,你可以从这个answer开始,或者在互联网上快速搜索。学习使用GDB似乎有一个高陡峭的曲线,但是网上的材料是详尽无遗的。你很容易就能找到符合你口味的东西。
通过软件工具单步完成ARM核心是很难的,这就是为什么ARM生态系统充满了昂贵的工具和额外的HW设备。
我使用的技巧是在汇编代码中手动插入BRK指令。BRK是自托管的调试断点.当core看到这条指令时,它会停止并通知OS有关情况。OS然后将情况通知调试器并将控制传递给它。当调试器获得控制时,您可以检查寄存器的内容,甚至可能对它们进行更改。操作的最后一部分是使您的进程继续进行。由于PC仍然处于断点指令,您必须做的是增加PC,将其设置为BRK之后的指令。
由于您提到了使用.S文件而不是.s文件,您可以利用gcc进行预处理/宏工作。通过这种方式启用、禁用BRK可能会成为较少的问题。
这种工作方式的最大缺点是周转时间。如果您想在gdb中研究某一点,您必须确保有一个BRK指令,这可能需要另一个构建/推送/调试周期。
https://stackoverflow.com/questions/29934786
复制相似问题