NDK 函数定义了返回值,却没有返回,引发 signal 4 (SIGILL) 错误
在做NDK开发的时候,引用了在嵌入式(非android平台)上的代码过来,明明原先正常使用的代码,移植过来就发生挂死,
由于代码太多,而LLDB又不能够跟踪到具体某一行的,只能一步一步地单步调试,最后发现了竞是 函数中定义了返回值,却没有返回 惹的祸。
错误信息
出错代码
打开编译警告
鉴于此,为了检查还有多少代码有这种问题,得修改CMakefile,让所有有问题的地方发出警告,
给编译器加上 "-Wall" 将所有警告打开,(注意里面不要有 "-Wno-return-type"选项,因为这个正好是关闭这个警告的)
搜索编译警告信息
这样,在编译输出信息里面搜索 "reaches end of non-void function",就可以搜索出所有的 定义了返回值,却没有返回的有问题的函数了。
(注意,要clean过再编译,不然会漏查了)
有人说可以使用 "-Werror",这个我不建议,因为在多文件的情况下,某个文件编译遇到了错误,编译工作就停止了,
这样就不能一次性搜索到所有文件中有问题的函数了。