v3.15.1在部分模拟器crash

PROP_COMPILE_SDK_VERSION=25
PROP_MIN_SDK_VERSION=10
PROP_TARGET_SDK_VERSION=22
PROP_APP_PLATFORM=10
PROP_APP_ABI=armeabi-v7a

腾讯手游助手,安装后一运行就crash。@minggo

同步了github上的代码,依旧crash。
是Cocos2dxEGLConfigChooser ?

Windows 7 Ultimate Service Pack 1 [Build 6.1.7601]
腾讯手游助手 1.0.3391.123 7C8BF4D6016B2F754E55BD13978AF516

Type: EXCEPTION_ACCESS_VIOLATION
Address: 629AD511
Error: Read address 0xBD063738

CallStack:
0X62200000[7AD511] nvoglv32.DLL: (269605756,373687896,0,4)
0X62200000[7AE30C] nvoglv32.DLL: (132,4,0,0)
0X62200000[109B1B] nvoglv32.DLL: (75249016,92032428,4,6)
0X057C0000[4DAC] libGLES_V2_translator.DLL: (4,6,5123,0)
0X04090000[17140] libOpenglRender.dll: (92022592,92023184,92023632,92024080)
0X057C0000[26C0] libGLES_V2_translator.DLL: (92023184,92023632,92024080,92024544)
0X057C0000[2740] libGLES_V2_translator.DLL: (92023632,92024080,92024544,92025008)
0X057C0000[2990] libGLES_V2_translator.DLL: (92024080,92024544,92025008,92025488)
0X057C0000[2B50] libGLES_V2_translator.DLL: (92024544,92025008,92025488,92025552)
0X057C0000[2D10] libGLES_V2_translator.DLL: (92025008,92025488,92025552,92025664)
0X057C0000[2EE0] libGLES_V2_translator.DLL: (92025488,92025552,92025664,92025808)
0X057C0000[30B0] libGLES_V2_translator.DLL: (92025552,92025664,92025808,92025968)
0X057C0000[3290] libGLES_V2_translator.DLL: (92025664,92025808,92025968,92026176)
0X057C0000[32D0] libGLES_V2_translator.DLL: (92025808,92025968,92026176,92026432)
0X057C0000[3340] libGLES_V2_translator.DLL: (92025968,92026176,92026432,92026672)
0X057C0000[33D0] libGLES_V2_translator.DLL: (92026176,92026432,92026672,92026784)
0X057C0000[3470] libGLES_V2_translator.DLL: (92026432,92026672,92026784,92026896)
0X057C0000[3540] libGLES_V2_translator.DLL: (92026672,92026784,92026896,92026960)
0X057C0000[3640] libGLES_V2_translator.DLL: (92026784,92026896,92026960,92027008)
0X057C0000[3730] libGLES_V2_translator.DLL: (92026896,92026960,92027008,92027040)
0X057C0000[37A0] libGLES_V2_translator.DLL: (92026960,92027008,92027040,92027072)
0X057C0000[3810] libGLES_V2_translator.DLL: (92027008,92027040,92027072,92027456)
0X057C0000[3850] libGLES_V2_translator.DLL: (92027040,92027072,92027456,92027696)
0X057C0000[3880] libGLES_V2_translator.DLL: (92027072,92027456,92027696,92027824)
0X057C0000[38A0] libGLES_V2_translator.DLL: (92027456,92027696,92027824,92028032)
0X057C0000[38C0] libGLES_V2_translator.DLL: (92027696,92027824,92028032,92028160)
0X057C0000[3A40] libGLES_V2_translator.DLL: (92027824,92028032,92028160,92028368)
0X057C0000[3B30] libGLES_V2_translator.DLL: (92028032,92028160,92028368,92028640)
0X057C0000[3BB0] libGLES_V2_translator.DLL: (92028160,92028368,92028640,92028672)
0X057C0000[3C80] libGLES_V2_translator.DLL: (92028368,92028640,92028672,92028896)
0X057C0000[3D00] libGLES_V2_translator.DLL: (92028640,92028672,92028896,92030112)
0X057C0000[3DD0] libGLES_V2_translator.DLL: (92028672,92028896,92030112,92029552)
0X057C0000[3EE0] libGLES_V2_translator.DLL: (92028896,92030112,92029552,92030480)
0X057C0000[3F00] libGLES_V2_translator.DLL: (92030112,92029552,92030480,92029792)
0X057C0000[3FE0] libGLES_V2_translator.DLL: (92029552,92030480,92029792,92030928)
0X057C0000[44A0] libGLES_V2_translator.DLL: (92030480,92029792,92030928,92030960)
0X057C0000[4270] libGLES_V2_translator.DLL: (92029792,92030928,92030960,92030992)
0X057C0000[4610] libGLES_V2_translator.DLL: (92030928,92030960,92030992,92031040)
0X057C0000[4360] libGLES_V2_translator.DLL: (92030960,92030992,92031040,92031632)
0X057C0000[47D0] libGLES_V2_translator.DLL: (92030992,92031040,92031632,92031664)
0X057C0000[47F0] libGLES_V2_translator.DLL: (92031040,92031632,92031664,92031792)
0X057C0000[4810] libGLES_V2_translator.DLL: (92031632,92031664,92031792,92032096)
0X057C0000[4840] libGLES_V2_translator.DLL: (92031664,92031792,92032096,92032544)
0X057C0000[4A90] libGLES_V2_translator.DLL: (92031792,92032096,92032544,92032576)
0X057C0000[4AB0] libGLES_V2_translator.DLL: (92032096,92032544,92032576,92032704)
0X057C0000[4B30] libGLES_V2_translator.DLL: (92032544,92032576,92032704,92032736)
0X057C0000[4C60] libGLES_V2_translator.DLL: (92032576,92032704,92032736,92032768)
0X057C0000[4E20] libGLES_V2_translator.DLL: (92032704,92032736,92032768,92033504)
0X057C0000[4E40] libGLES_V2_translator.DLL: (92032736,92032768,92033504,92034064)
0X057C0000[4EC0] libGLES_V2_translator.DLL: (92032768,92033504,92034064,92034096)

Regs:
EAX=00000003, EBX=00000000, ECX=ACF45BBC, EDX=1011DB7C
ESI=00000030, EDI=16460658, EBP=1604EBC4, ESP=1604EBA4, EIP=629AD511
Bytes at CS:EIP:
8B 04 0A 8D 52 04 89 42 FC 43 8B 84 F7 90 00 00 00 3B D8 7C EB 8B 7D 08 8B 4D FC 8B 55 F8 8B 5D
pid=7672 init_tid=7980 crashtid=6020
Bytes at teb:
CC E2 04 16 00 00 05 16 00 D0 04 16 00 00 00 00 00 1E 00 00 00 00 00 00 00 F0 EA 7E 00 00 00 00 F8 1D 00 00 84 17 00 00

3.15.1没有修改Cocos2dxEGLConfigChooser之类的代码。GLES3 context的问题是3.15.1后引入的,已经解决了,和你的问题没关系。

模拟器的问题一般是架构不对吧,你编译的是armeabi-v7a,模拟器是这个架构吗?还是x86啊?

还不说模拟器,我真机偶尔都会crash

真机crash问题得具体原因具体分析了。

3.15版本时,也是编译armeabi-v7a,运行是没有问题的。
我同步github最新的代码后,就安装完后其自动运行,一运行就报如上的crash

真机上的Crash是多线程问题。
CCFileUtils-android.cpp line260 注释掉就可以了。

FileUtils::Status FileUtilsAndroid::getContents(const std::string& filename, ResizableBuffer* buffer)
{
这行代码,异步加载资源时会导致crash
//Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(EVENT_BEFORE_READ_FILE);

static const std::string apkprefix("assets/");
if (filename.empty())
    return FileUtils::Status::NotExists;

string fullPath = fullPathForFilename(filename);

if (fullPath[0] == '/')
    return FileUtils::getContents(fullPath, buffer);

string relativePath = string();
size_t position = fullPath.find(apkprefix);
if (0 == position) {
    // "assets/" is at the beginning of the path and we don't want it
    relativePath += fullPath.substr(apkprefix.size());
} else {
    relativePath = fullPath;
}

if (obbfile)
{
    if (obbfile->getFileData(relativePath, buffer))
        return FileUtils::Status::OK;
}

if (nullptr == assetmanager) {
    LOGD("... FileUtilsAndroid::assetmanager is nullptr");
    return FileUtils::Status::NotInitialized;
}

AAsset* asset = AAssetManager_open(assetmanager, relativePath.data(), AASSET_MODE_UNKNOWN);
if (nullptr == asset) {
    LOGD("asset is nullptr");
    return FileUtils::Status::OpenFailed;
}

auto size = AAsset_getLength(asset);
buffer->resize(size);

int readsize = AAsset_read(asset, buffer->buffer(), size);
AAsset_close(asset);

if (readsize < size) {
    if (readsize >= 0)
        buffer->resize(readsize);
    return FileUtils::Status::ReadFailed;
}

return FileUtils::Status::OK;

}

原来是CCCameraBackgroundBrush.cpp的改动有问题。@minggo

哪个改动有问题?

模拟器大部分是架构问题,调试还是优先用真机吧,毕竟android本身比较乱。

3.15.1 crash 跟进