在调试模式且使用gnome-terminal命令的情况下生成core文件

在debug模式且使用gnome-terminal命令的情况下生成core文件


一、在debug模式且使用gnome-terminal命令的情况下生成core文件的前提条件
( 1 ) 进程是设置-用户-ID,而且当前用户并非程序文件的所有者;
( 2 ) 进程是设置-组-ID,而且当前用户并非该程序文件的组所有者;
( 3 ) 用户没有写当前工作目录的许可权;(切记)
( 4 ) 文件太大;core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读;
二、在debug模式且使用gnome-terminal命令的情况下生成core文件的注意事项
( 1 )编译参数中不能包含-fsanitize=address这一参数。
( 2 )如果没有永久设定core大小情况下,每个终端的core生成大小为默认值即0。
三、错误示例
使用一个程序运行./b.elf程序
编译参数

	set(CMAKE_CXX_FLAGS "-fsanitize=address -pipe -g -std=gnu++11 -Wall -D_REENTRANT -fPIC -DNDEBUG -fsigned-char")
    set(CMAKE_C_FLAGS "-fsanitize=address -pipe -g -Wall -D_REENTRANT -fPIC -DNDEBUG -fsigned-char")
    set(CMAKE_EXE_LINKER_FLAGS "-fsanitize=address -static-libasan")
gnome-terminal命令的代码片段
	 system(" gnome-terminal -x  ./b.elf ");
错误原因:
       1.编译参数设置为-fsanitize=address会使用AddressSanitizer工具。使用此工具后不能生成core文件。
       2.如果系统core文件默认值为0且没有设置core文件的生成大小,会导致core文件无法生成。 

四、正确示例

	使用一个程序运行./b.elf程序
   set(CMAKE_CXX_FLAGS " -pipe -g -std=gnu++11 -Wall -D_REENTRANT -fPIC -DNDEBUG -fsigned-char")
   set(CMAKE_C_FLAGS " -pipe -g -Wall -D_REENTRANT -fPIC -DNDEBUG -fsigned-char")
   set(CMAKE_EXE_LINKER_FLAGS "-g ")
gnome-terminal命令的代码片段
	 system("gnome-terminal -x bash -c \"ulimit -c unlimited && ./b.elf  \" ");
正确示例与错误示例的差别:
	1.正确示例中在编译参数中没有-fsanitize=address这一参数
	2.正确示例中在使用gonme-terminal打开终端后,使用shell命令设置此终端下生成的core文件大小并运行./b.elf程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值