我正在编写具有 Java 和本机部分的 Android 应用程序。Java 部分向本机部分发送消息并接收回复。本机部分都在单独的线程上工作,当它返回答案时,我想在主线程上处理答案。这是我的扩展应用程序类的一部分:
@Override
public void OnMessage(final Message msg, final long answerTo) {
Log.i(TAG, msg.ToStr()); // OK
handler.post(new Runnable() {
@Override
public void run() {
Log.i(TAG, msg.ToStr()); // Fatal signal 11 (SIGSEGV)
// at 0x74616862 (code=1), thread 13255
}
});
}
本机代码在其线程上调用 OnMessage 方法并尝试通过 Handler 将其传递给 UI 线程。当我尝试在 UI 线程中使用任何 msg 方法时,我的程序因 SEGSEGV 而失败。
重要的事实是 Message 类是 C++ Message 类的包装器。Wrapper 由SWIG生成。
我尝试在 GDB 中调试它,GDB 甚至向我显示堆栈跟踪,它以本机 Message.toStr 方法结束。但是 gdb 拒绝打印变量,说“在当前上下文中没有符号” * “”。
请帮我解决这个问题。