是游戏程序,这几天频繁出现段错误,怀疑人有人故意为之。一出现段错误,游戏就崩溃无法运行,66666[27964]: segfault at 6a ip 00000000006d9c66 sp 00007fd0f2bf74b0 error 4 in 66666[400000+6ea000]
6[28118]: segfault at 6a ip 00000000006d9c66 sp 00007f608ebf74b0 error 4 in 6[400000+6ea000]
6666[31349]: segfault at 6a ip 00000000006d9c66 sp 00007fc8cd7f54b0 error 4 in 6666[400000+6ea000]
666[28386]: segfault at 6a ip 00000000006d9c66 sp 00007efe2159c4b0 error 4 in 666[400000+6ea000]
66[36668]: segfault at 6a ip 00000000006d9c66 sp 00007fde6ebf74b0 error 4 in 66[400000+6ea000]
帮忙看看具体是哪里出了bug
这是一个段错误,原因是跟随一个空指针试图寻找要运行的代码(即在获取指令期间)。
如果这是一个程序,而不是一个共享库.
运行addr2line -e 段错误程序 00000000006d9c66 (并对给出的其他指令指针值重复)来查看错误发生的地方。
更好的做法是获得一个调试工具构建,并在调试器(比如gdb)下重新生成问题。
错误意味着什么?
以下是各领域的细分:
address(在at之后)——代码试图访问的内存位置(很可能6a是我们期望设置为有效值的指针的偏移量,但它却指向0)
IP-指令指针,即。执行此操作的代码存在于何处
Sp-堆栈指针
error—页面错误的错误代码;关于这在x86上的意义,请参阅下面的内容。
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/include/asm/trap_pf.h?h=v5.16#n5
/*
*页面错误错误码位:
*
*bit0 == 0:没有发现页面1:保护故障
* bit 1 == 0:读访问1:写访问
* bit 2 == 0:内核模式访问1:用户模式访问
* bit 3 == 1:检测到保留位
* bit 4 == 1:错误是一个指令获取
* bit 5 == 1:保护键块访问
* bit 15 == 1: SGX MMU页面故障
*/
生成dump文件,调试
用gdb调试定位发现问题,或者输出dump文件查找定位。
朋友这个问题感觉我以前回答过,“error 4”是什么意思?把它更换成二进制表示,就是:100。说明是用户态内存访问越界了
bit2:值为1表示是用户态程序内存访问越界,值为0表示是内核态程序内存访问越界
bit1: 值为1表示是写操作导致内存访问越界,值为0表示是读操作导致内存访问越界
bit0: 值为1表示没有足够的权限访问非法地址的内容,值为0表示访问的非法地址根本没有对应的页面,也就是无效地址
望采纳谢谢欧