1 cmake gdb 调试, CMakeLists.txt 设置
方法1: SET(CMAKE_BUILD_TYPE "Debug") ? SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb") ? SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") ? |
方法2: project(coredumptest) cmake_minimum_required(VERSION 2.8) add_compile_options(-std=c++11 -pthread -g ?-ggdb -O0 -Wall ? -fstack-protector-all -march=native -fnon-call-exceptions) aux_source_directory(. SRC_LIST) add_executable(${PROJECT_NAME} ${SRC_LIST}) 说明: 其中-g表示使用debug编译, -ggdb:在可执行文件中包含可供GDB使用的调试信息 -O0 表示编译时不优化,关闭所有优化选项 -Wall 开启大部分警告提示 -fstack-protector-all 保护栈信息 使用 -march=native,GCC会自动检测你的CPU支持的指令集。 -fnon-call-exceptions 产生的代码可供陷阱指令(如非法浮点运算和非法内存寻址)抛出异常,需要相关平台的运行时支持,并不普遍有效 |
?
2设置core文件大小
? ? ? ?多线程程序中的有些错误并不是每次都能够出现的,偶尔出现一次可是很难得的,此时就需要保存错误现场,便于慢慢分析.那么就需要出现coredump的时候就能够生成和保存core文件。
2.1系统默认是不生成core文件的,只有手动输入ulimit -c xx命令才会产生core文件
ulimit -c 1024 设置core文件最大为1024k ? ulimit -c unlimited 不限制core文件大小
注意ulimit -c unlimited 只在当前路径下有效,换个路径输入ulimit -c发现为0
2.2?若要永久性的生成coredump文件,在/etc/bashrc或者~/.bashrc文件中加ulimit -c unlimited 重启电脑,输入ulimit -c 输出为unlimited
3测试用例
#include <stdio.h> int main() { ? ? char *ptr="linuxers.cn"; ? ? *ptr=0; } ?
运行./coredumptest 发现可执行程序文件夹下生成了coredumptest? ?core文件.
4使用gdb分析,查看堆栈情况 输入命令 gdb ./coredumptest core ?
|