Ham*_*ani 4 debugging assembly arm android-ndk
我正在开发一种使用ARM Neon指令的算法.我正在使用汇编程序文件编写代码(.S并且没有内联asm).
我的问题是什么是调试目的的最佳方式,即查看寄存器,内存等.目前,我正在使用Android NDK编译和我的Android手机来运行算法.
穷人的调试解决方案......
您可以使用gdb/ gdbserver远程控制Android手机上的应用程序执行.我不是在这里提供详细信息,因为它们一直在变化,但是例如你可以从这个答案开始,或者在互联网上快速搜索.学习使用GDB似乎有一个很高的曲线,但网上的材料是详尽无遗的.您可以轻松找到符合您口味的东西.
通过软件工具单步执行ARM内核很难,因此ARM生态系统充满了昂贵的工具和额外的硬件设备.
我使用的技巧是BRK在汇编代码中手动插入指令.BRK是自托管调试断点.当核心看到该指令时它停止并通知操作系统有关情况.操作系统然后通知调试器有关情况并将控制传递给它.当调试器获得控制权时,您可以检查寄存器的内容,甚至可能对它们进行更改.操作的最后一部分是让您的流程继续进行.因为PC仍然在我们的断点指令你必须做的是增加PC,把它设置为指令之后BRK.
由于您提到使用.S文件而不是.s文件,因此您可以利用这些文件gcc进行预处理/宏工作.这种方式启用,禁用BRK可能不会成为问题.
这种工作方式的重大缺点是周转时间.如果你想用gdb调查某一点,你必须确保那里有一条BRK指令,这可能需要另一个构建/推送/调试周期.
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |