我有一个使用版本11的3.6.2和SDK工具的Eclipse设置,它已经构建了我的主项目很长一段时间.
对于一个不同的项目,我认为我需要将我的SDK升级到最新和最好的 - 此时API 14(ICS 4.0).
我甚至无法重建我经历的步骤,但发生的事情是我的项目似乎要构建,但我会发现它会说它正在跳过后编译器步骤,最后我将没有APK.
我还注意到它更新了我的.classpath,因此输出路径是bin/classes而不是.bin.
一路上我尝试将Eclipse更新到最新版本(Indigo 3.7.1),但这没有用.
我们的项目在几个平台上使用了几个boost 1.48库,包括Windows,Mac,Android和IOS.我们能够在使用IOS时始终让项目的IOS版本崩溃(非常可靠但可靠),并且从我们的调查中我们看到〜thread_data_base在线程的thread_info上被调用,而其线程仍然在运行.
这似乎是由于智能指针达到零计数而发生的,即使它显然仍在thread_proxy函数中的范围内,该函数创建它并在线程中运行所请求的函数.这似乎发生在各种情况下 - 崩溃之间的调用堆栈不相同,尽管有一些常见的变化.
需要明确的是 - 这通常需要运行代码来创建数百个线程,尽管同时运行的时间绝不会超过30个.我很幸运,并且在跑步的早期也得到了,但这种情况很少见.我创建了一个析构函数的版本,它实际上捕获了代码:
在libs/thread/src/pthread/thread.cpp中:
thread_data_base::~thread_data_base()
{
boost::detail::thread_data_base* const thread_info=detail::get_current_thread_data();
void *void_thread_info = (void *) thread_info;
void *void_this = (void *) this;
// is somebody destructing the thread_data other than its own thread?
// (remember that its own which should no longer point to it anyway,
// because of the call to detail::set_current_thread_data(0) in thread_proxy)
if (void_thread_info) { // == void_this) {
__builtin_trap();
}
}
Run Code Online (Sandbox Code Playgroud)
我应该注意(从已注释掉的代码中看到)我之前检查过void_thread_info == void_this,因为我只检查线程的当前thread_info是否自杀的情况.我也看到过get_current_thread_data返回的值非零且与"this"不同的情况,这真的很奇怪.
当我第一次编写该版本的代码时,我写道:
if (((void*)thread_info) == ((void*)this))
Run Code Online (Sandbox Code Playgroud)
在运行时,我得到了一些非常奇怪的异常,我说了一些虚拟功能表或类似的东西 - 我不记得了.我决定尝试为这个对象类型调用"=="并且对此不满意,所以我重写了上面的内容,将转换为void*作为单独的代码行.这本身对我很怀疑.我不是一个急于责怪编译器的人,但...... …
我正在一个具有丰富文件结构的大型遗留项目中工作。我知道我需要编辑的文件的名称。但我不记得它在树的什么地方了!在 XCode 中,我将在项目文件视图中使用过滤器。但是Android Studio中好像没有类似的东西。我该怎么办?