Android运行时随机出现Fatal signal 11 sigsegv(SIGSEGV) at 0xa7543c80 (code=2), thread 3459 (Thread-204)

cocos2dx fatal signal11(SIGSEGV) at 0x(code=一)的解决实践_HTTPSendRequest像ASP提交表单的有关问题_PowerDesigner数据库建模name和code写反了怎么处理__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
cocos2dx fatal signal11(SIGSEGV) at 0x(code=一)的解决实践
HTTPSendRequest像ASP提交表单的有关问题
PowerDesigner数据库建模name和code写反了怎么处理
cocos2dx fatal signal11(SIGSEGV) at 0x(code=一)的解决实践
cocos2dx fatal signal11(SIGSEGV) at 0x(code=1)的解决实践
产品基于cocos2dx开发的棋牌游戏。出现的问题:如果app游戏时正好网络处于开启状态,则运行正常。反之,则在android logcat输出signal11(SIGSEGV) at 0x(code=1)
12-06 14:59:22.482: I/dalvikvm(8782): dvmDdmHandleHpsgChunk(when 0, what 0, heap 0)
12-06 14:59:23.376: I/dalvikvm(8782): Debugger is active
12-06 14:59:44.266: D/Cocos2dxActivity(8782): model=HUAWEI U9510E
12-06 14:59:44.266: D/Cocos2dxActivity(8782): product=U9510E
12-06 14:59:44.266: D/Cocos2dxActivity(8782): isEmulator=false
12-06 14:59:45.873: W/System.err(8782): /data/system/carrierinfo.prop: open failed: ENOENT (No such file or directory)
12-06 14:59:45.879: W/System.err(8782): java.net.UnknownHostException: Unable to resolve host "": No address associated with hostname
12-06 14:59:45.886: W/System.err(8782):
at java.net.InetAddress.lookupHostByName(InetAddress.java:426)
12-06 14:59:45.889: W/System.err(8782):
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
12-06 14:59:45.893: W/System.err(8782):
at java.net.InetAddress.getAllByName(InetAddress.java:220)
12-06 14:59:45.899: W/System.err(8782):
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
12-06 14:59:45.903: W/System.err(8782):
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
12-06 14:59:45.903: W/System.err(8782):
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
12-06 14:59:45.913: W/System.err(8782):
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
12-06 14:59:45.916: W/System.err(8782):
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
12-06 14:59:45.923: W/System.err(8782):
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
12-06 14:59:45.929: W/System.err(8782):
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
12-06 14:59:45.939: W/System.err(8782):
at com.umeng.fb.a.b.a(FbClient.java:189)
12-06 14:59:45.943: W/System.err(8782):
at com.umeng.fb.model.Conversation$1.run(Conversation.java:219)/data/system/carrierinfo.prop: open failed: ENOENT (No such file or directory)
12-06 14:59:45.946: W/System.err(8782):
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-06 14:59:45.946: W/System.err(8782):
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-06 14:59:45.946: W/System.err(8782):
at java.lang.Thread.run(Thread.java:856)
12-06 14:59:45.949: W/System.err(8782): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
12-06 14:59:45.966: W/System.err(8782):
at libcore.io.Posix.getaddrinfo(Native Method)
12-06 14:59:45.966: W/System.err(8782):
at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:56)
12-06 14:59:45.969: W/System.err(8782):
at java.net.InetAddress.lookupHostByName(InetAddress.java:411)
12-06 14:59:45.969: W/System.err(8782):
... 14 more
12-06 14:59:45.976: W/System.err(8782): /data/system/carrierinfo.prop: open failed: ENOENT (No such file or directory)
12-06 14:59:47.446: A/libc(8782): Fatal signal 11 (SIGSEGV) at 0x (code=1)
完整的排错过程如下1, android debug模式查看具体出错的问题
貌似不是在android层, 确定为cpp代码出了问题;2. appdelegate.cpp
CCLog("test")
没有打印出来,仍然直接报错3.
继续log输出
System.loadLibrary("game");
Log.i(TAG,"android loadLibary done");
logcat能够输出相关代码,说明android层的代码都执行了,现在代码运行到了cpp层;4. 继续跟踪jni/game/main.cpp
Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit
printf("test")
log cat没有显示print信息
这里一直对cocos2dx在android输出存在疑问。后来在application.mk添加了相关的设置仍然看不到log输出。5. 采用
coco2d:cclog("test")
情况依旧6.
开始排除jpush第三方推送jar, so库是否存在问题。
删除libs/libsys.so (jpush的so文件)
删除jpushInterface.init(this)7. 继续在jni/game/main.cpp
使用ccmessagebox();
没有显示弹出窗口提示;8. 修改application.mk
LOCAL_CFLAGS += -DCOCOS2D_DEBUG=2
没有结果,问题仍然存在
loaded /system/lib.egl/libegl_viviante.so,
如果关闭网络,则没有显示加载上述的so文件
10. 打开jpush.setDebug(true);
在无网络情况下,显示sis error11. 使用ndk-stack来查找崩溃
./adb logcat|ndk-stack -sym /Users/chenxu/work/c++/cocos2d-x-2.1.4/work/doudizhu/proj.android/obj/local/armeabi/
********** Crash dump: **********
Build fingerprint: 'Huawei/U9510E/hwu.4/HuaweiU9510E/CHNC00B122:user/ota-rel-keys,release-keys'
pid: 27322, tid: 27322
&&& com.nbgame.doudizhu &&&
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr
Stack frame #00
pc 003b8158
/data/data/com.nbgame.doudizhu/lib/libgame.so (_ZN12GameProtocal19createServerMessageEi): Routine createServerMessage in /Users/chenxu/work/c++/cocos2d-x-2.1.4/work/doudizhu/proj.android/../../../baisonext/NetWork/GameProtocal.cpp:46
Stack frame #01
pc 003b7dcc
/data/data/com.nbgame.doudizhu/lib/libgame.so (_ZN7Network20dispatchNetworkErrorEi): Routine dispatchNetworkError in /Users/chenxu/work/c++/cocos2d-x-2.1.4/work/doudizhu/proj.android/../../../baisonext/NetWork/Network.cpp:319
真正崩溃原因,这次是冤枉了jpush等第三方库,是android工程编写有问题。 原因是android启动后立即监控网络状态,如果网络为断开状态,则通过jni call cpp, 后者调用dispatchNetwork()函数,通过创建一个message丢入队列,界面线程pop消息之后,画出网络错误提示界面提示。
问题在于:这些都是多线程处理的,即android层由独立线程监控网络状态, cocos2dx界面层由独立线程运行,其中后者在收到网络错误时候,需要有关的未初始化实例来创建消息,导致了空指针的错误。 fatal signal 11(SIGSEGV)
最后解决办法:只有确定网络ok, 并且用户成功登陆后,cpp层采取调用原生android层,去***网络状态。这样可以避免前面网络未建立就立刻通知界面的错误;
ndk-stack是个好东西,对于android异常崩溃能够提供call-stack,有效确定代码的出错位置;
HTTPSendRequest像ASP提交表单的有关问题
HTTPSendRequest像ASP提交表单的问题,高手进想利用Wininet提供的API来实现与服务器的信息交互,服务端asp代码&%set conn=server.createobject("adodb.connection")conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("guestbook.mdb")name=request.form("name")tel=request.form("tel")message=request.form("message")
exec="insert into guest(name,tel,message)values('"+name+"',"+tel+",'"+message+"')"conn.execute execconn.closeset conn=nothingresponse.write "记录添加成功!"%&功能就是将数据添加到access数据库客户端我用HttpSendRequest函数Post数据给服务器的asp,当我定义char buf[100]="name=123&tel=123&message=test"; 发送请求后,数据可以正确添加到数据库,可是当我定义Unicode时,使用WCHAR buf[100]=_T"name=123&tel=123&message=test";发送请求就会出问题,服务端会回显SQL语法错误,请问Post个Wchar类型的数据不可以吗? 请高手指点------解决方案--------------------
引用:抓个包看看你提交的数据时什么不就很清楚了~包抓到了
如果我用网页提交 抓包会发现汉子都被转变成%DE%AB 大概就是这种形式了 而我用程序提交抓包得到的就转不了这种形式 还有就是字符怎么转成%XX%XX这种格式?
------解决方案--------------------
不要用WCHAR
然后再将需要Unicode的地方转换成URL编码发出去
转换方法如楼上
PowerDesigner数据库建模name和code写反了怎么处理
PowerDesigner数据库建模name和code写反了怎么办?name和code的输入错误:有一位网友使用PowerDesigner进行数据库建模,由于对PowerDesigner的使用不熟悉,勿以为对表中的列生成脚本会使用name而不是code。该网友的本意是:使用中文作为注释便于理解和沟通,而sql脚本则采用英文。但是正是由于对这个概念没有弄清楚,恰恰将name和code弄错,code输入列中输入了中文,name列中输入了英文。如下图所示:   & language="JavaScript" type="text/javascript"&resizeImage('http://dev.csdn.net/Develop/ArticleImages/22/22565/CSDN_Dev_Image_05510.gif','image0')  所以生成的脚本如下:  ========================================  create table 学生 (   学号 int null,   姓名 varchar(20) null,   年龄 smallint null,   性别 bit null,   已婚 bit null,   ***号 varchar(18) null,   备注 varchar(50) null  )  ========================================  这恰恰和他的本意相违背,所以,为了正确的生成英文脚本时,不得不手动将name和code以正确的中英文次序再重新输入一次,模型中有几十张表,该工作耗费了大量宝贵的开发的时间,造成了不必要的损失。  讨论:  要解决这个问题我们要首先要了解PowerDesigner是如何成脚本。在2.15PowerDesigner的变量一节中曾经提到,很多对象都既包含一个代码变量(code variable)又包含一个生成代码变量(generated code variable)。代码(code)变量是在对象属性窗口中定义的属性代码,而生成代码(generated code)变量则是根据对象的属性代码和生成选项计算而产生的,如果代码(Code)的长度超过了DBMS中限制的最大长度,则会自动截取code产生生成代码(generated code)。而PowerDesigner在默认情况下生成脚本既不是采用name也不是code,而是代码(code)生成的“生成代码”(generated code)作为对象的名称。而通常情况下由于code本身没有超过DBMS规定的最大长度,所以会给人一种错误的认识,认为脚本生成使用的是code作为名称。  这样,在这个例子中解决问题的思路就很清楚了,如果可以采用name来生成英文代码就可以解决该问题,换句话说,就是用name(名称)替换generated code(生成代码)。参考2.15PowerDesigner的变量一节中的变量列表:“用于定义表的变量”,可得知COLUMN是列的生成代码,COLNNAME是列名称(name),COLNCODE是列代码(code)。  COLNCODE和COLUMN不同之处在于COLUMN是列的生成代码,即COLNCODE在DBMS最大长度范围内的code,如果code太长,就会被截取一部分,这时候的COLUMN就和COLNCODE就不相等了,但通常情况下code不会超过最大长度即与COLUMN相等。  解决方案:  如下图所示,选择Database-&Edit current database,选择script-&object-&column-&add   & language="JavaScript" type="text/javascript"&resizeImage('http://dev.csdn.net/Develop/ArticleImages/22/22565/CSDN_Dev_Image_05512.gif','image1')  图表 2.15.2.1  可以在窗口右方的Value编辑框中看到定义表中列的代码模板:  ==========================================  %20:COLUMN%[%COMPUTE%?AS(%COMPUTE%):%20:DATATYPE%[%IDENTITY%?%IDENTITY%:[%NULL%][%NOTNULL%]][ default %DEFAULT%]  [[constraint %CONSTNAME%] check (%CONSTRAINT%)]]  ==========================================  参考2.15.2 PowerDesigner中对变量格式化一节,此外,由于变量在PowerDesigner中的引用需要加“% %”,所以很容易理解代码模板中的“%20:COLUMN%”表示对列的生成代码(generated code)采用固定长度20位,而我们需要做的正是将COLUMN换为COLNNAME,也就是将“%20:COLNNAME%”换为“%20:COLNNAME%”,然后点击确定,弹出确认窗口,点击“是”表示保存该修改。进入表中的priview属性页中可以查看代码发生变化,基本上解决了这个问题:  ==========================================  create table 学生 (   studenNo int null,   studentName varchar(20) null,   age smallint null,   gender bit null,   isMarried bit null,   idCardNo varchar(18) null,   description varchar(50) null  )  ==========================================  观察代码发现表名称还是采用了这位网友输入的相反的中文,我们可以用相同的方法,Database-&Edit current database,选择Script-&Object-&Table-&Create将%TABLE%换为%TNAME%,这样,便会发现脚本中的“学生”也会正确的成为“student”。  通过这种方法,这个问题的解决只需要花费不到一分钟的时间,而不需要动辄手动修改数小时,让人头晕眼花没有一丝成就感。
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:

参考资料

 

随机推荐