- 前言
- 一、准备
- 二、命令:objcopy
- 三、调试core文件
前言
线上项目在宕机时会产生core文件,外网没有源码,通过符号表可以看到程序崩溃在哪个文件哪行。
一、准备
先写一个可以宕机的代码
#include#include void testcore(){ std::vector a; std::vector b; a[1] = 0; std::cout << a[200] << std::endl; } int main(){ testcore(); return 0; }
g++ -o Server helloworld.cpp -g
-g 带调试信息
由于带编译信息可执行文件比较大,所有使用objcopy命令来生成两个比较小的文件
1.生成调试信息文件objcopy --only-keep-debug Server S.symbol
2.生成不含调试信息的可执行文件 objcopy --strip-debug Server SamllServer
将这连个文件同时放到外网,调试的时候使用S.symbol
使用ulimit -u unlimited(光使用这个命令 效果是本次登录有效)就会在宕机的时候产生core文件
使用gdb gdb -c core.* --se S.symbol 然后在gdb中使用bt 就可以看到哪一行
效果图:



