Android 调试哪个析构函数正在冻结my函数的返回

Android 调试哪个析构函数正在冻结my函数的返回,android,c++,android-ndk,java-native-interface,Android,C++,Android Ndk,Java Native Interface,我有一个返回int的函数,但在其中使用了一个名为Handler的对象: int handler() { Handler myHandler; //... return 0; } 函数永远不会返回,因为它被卡在处理程序上。我做到了: #define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__) class Handler{ Handler(){} ~Ha

我有一个返回int的函数,但在其中使用了一个名为
Handler
的对象:

int handler() {
    Handler myHandler;
    //...
    return 0;
}
函数永远不会返回,因为它被卡在处理程序上。我做到了:

#define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)

class Handler{
    Handler(){}
    ~Handler(){ALOGV("destructing handler...")}
    //some private members
};
我可以在Android的JNI输出上看到
“Destruching handler…”
,但函数从未返回值。这意味着,
myHandler
的销毁永远不会完成。我将
ALOGV
放在
Handler
中包含的所有对象的析构函数中,也放在这些对象包含的所有对象中,但我看不到其中任何对象的日志,只看到
~Handler
的日志

是否有可能
\uuuu android\u log\u print
正在缓冲打印调用

在对象被破坏之前,我应该看到每个破坏器的输出,这种假设是错误的吗


当处理程序要被析构函数时,它首先调用它的析构函数,然后调用它所持有的每个对象的析构函数,该析构函数应该调用它们的析构函数并在屏幕上打印。

似乎是一个可以通过简单地将
myHandler
对象包装到另一组
{}中来轻松测试的东西
大括号使其在
返回之前而不是之后被销毁
int handler(){{handler myHandler;//…}返回0;}
然后可以在到达
返回之前调试整个析构函数,甚至可能在
返回
之前放置另一个print语句,查看它是否刷新析构函数的日志消息。请提供@RemyLebeau是的,我这样做了,并确认问题是由于
处理程序
处理程序的析构函数
什么也不做,所以问题出在它的析构函数上objects@GuerlandoOCs但我的观点是,通过使
Handler
的析构函数本身更具确定性,这将使调试其他对象析构函数更容易。您可以决定何时调用它,以便您可以在需要时逐步执行它。另一种方法是使用
new
/
delete
而不是范围大括号。