永发信息网

如何找出在Android的一个SIGSEGV的原因

答案:1  悬赏:70  手机版
解决时间 2021-02-27 23:31
如何找出在Android的一个SIGSEGV的原因
最佳答案
Linux下编程(尤其是服务端程序)若由于内存越界或其他原因产生“非法操作”,会导致程序悄无声息地死去,初学者往往不知道程序死掉的原因。本人也曾饱受程序死不瞑目之苦。其实“非法操作”在绝大多数时候是因为“段错误”,即 SIGSEGV。而找到SIGSEG号抛出的位置,也就找到了程序死掉的原因。下面列出一些捕获SIGSEGV的方法。假设程序名为 myprg,其进程ID(pid)为 2032。方法一:# ./myprg // 运行程序# ps -ef | grep myprg // 找出 myprg 的 pid# gdb myprg 2032 > debug.log // 让 gdb 接管 myprg 的运行# (gdb) continue此方法利用gdb调试器捕获SIGSEGV。上例中,将gdb输出信息存入debug.log,关闭终端,gdb并不退出,继续运行直到 myprg 出错退出。gdb将捕获到出错点。方法二:# ./myprg // 运行程序# Segment fault (core dumped) // 程序死掉了,系统输出 "Segment fault"# gdb myprg core // 用 gdb 分析 core 文件此方法利用core文件,进行事后分析。但前提是保证系统会生成core文件。# ulimit -a查看当前core文件大小的限制,若为0,则需将它改为unlimited。# ulimit -S -c unlimited或修改 /etc/profile,找到 unlimit -S -c 0,将0改为unlimited,重启系统。另外,如果程序安装了 SIGSEGV 异常处理函数,那么 gdb myprg core 时显示的并不是真实的出错位置,要想看到真实的出错点,必须暂时去掉异常处理函数。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
98年天霸表 海霸表的经典广告
广州中原地产中介公司,怎么样?有谁在中原地
澳洲公寓需要负担哪些费用
descendant和offspring有什么区别
像飞坦穿越到火影之类的猎人人物穿到火影
下列公式正确的是( )。A.现金周转期=存货周转
乌镇梵璞主题文化酒店地址有知道的么?有点事
用酒腌制醉虾,普通的酒可以吗
宸字有关的成语
公司走账是什么意思
would you please translate these sentences
问道装备4改五大概要多少钱
新盛五金地址有知道的么?有点事想过去
假设你是刘明,寒假期间准备去北京旅游。请你
我户口是河北固安的我结婚了老公的能迁过来吗
推荐资讯
有机花菜和花菜的区别有哪些
肇庆桥西车站坐什么车到人民医院。要多少钱。
求西式烩饭做法
文化街这个地址在什么地方,我要处理点事
★★高信财务软件恢复账套问题!!急!!
我爱扔东西,看到家里有很多东西就想扔掉点,
联想电脑正常关机后 , 第二天按开机键怎么都
沛县汉兴街道办事处二堡社区居民委员会我想知
蝮蛇多文的“文”字是什么意思
下列关于细胞全能性的理解,错误的是A. 高度
奥迪a4减震器属于偏软还是偏硬
做交互设计的门槛很高吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?