Android 在代码中随机点接收信号(NDK)
我已经得到了答案,所以我只是发布这个,以防任何其他像我这样糟糕的程序员遇到这个问题。(不过,有人可能会解释一些黑魔法)Android 在代码中随机点接收信号(NDK),android,android-ndk,Android,Android Ndk,我已经得到了答案,所以我只是发布这个,以防任何其他像我这样糟糕的程序员遇到这个问题。(不过,有人可能会解释一些黑魔法) 我正在调试Android设备(三星Galaxy S7,尽管该问题很可能会在其他设备上重现)中的本机代码,并且代码将在随机位置停止,并带有SIGILL。当一个函数被声明返回一些值,但实际上在其实现中没有返回值时,问题就会出现,例如: int myfunc() { someObject.performVeryImportantTask(); // no return
我正在调试Android设备(三星Galaxy S7,尽管该问题很可能会在其他设备上重现)中的本机代码,并且代码将在随机位置停止,并带有SIGILL。当一个函数被声明返回一些值,但实际上在其实现中没有返回值时,问题就会出现,例如:
int myfunc() {
someObject.performVeryImportantTask();
// no return value! :(
}
我现在开始意识到-Werror的价值(我很想责怪clang,但我更清楚这一点)。让我困惑的是,为什么它会在代码中的随机点上抛出一个SIGILL。我的最佳猜测是,在某一点上缺少返回值会扰乱代码,并生成一个跳转到无效地址,但如果有人能进一步告诉我,请做我的客人。我建议将
-Werror-Wall
添加到您的cflags中-Wreturn类型将为您捕捉这些错误。