1. 大家在自己的电脑把教室里的实操在做一遍: hello world 重新上传;
mkdir day1
cd day1
vim hello.cpp
#内容略
gcc -o hello hello.cpp
./hello
git init
git remote add origin https://……仓库地址
git add .
git config --global user.name "账号名"
git config --global user.email "邮箱@.com"
git commit -m "备注"
git push -u origin master
2. 提交一个触发coredump的函数,并提交core文件。
需要先写一个编译能通过但是执行会出错的函数。
刚开始做的时候发现生成不了core文件,遂查询,发现这篇文章为什么程序异常退出没有core文件?_没有生成core文件-CSDN博客是里面的第二种情况,需要修改大小同时调整文件位置,下面是查看的输出
# ubuntu2204 @ ubuntu2204-VirtualBox in ~/workspace/day1 on git:master x [19:38:23]
$ ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) unlimited
-m: resident set size (kbytes) unlimited
-u: processes 15327
-n: file descriptors 1024
-l: locked-in-memory size (kbytes) 500060
-v: address space (kbytes) unlimited
-x: file locks unlimited
-i: pending signals 15327
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0
-N 15: unlimited
# ubuntu2204 @ ubuntu2204-VirtualBox in ~/workspace/day1 on git:master x [19:41:20] C:1
$ cat /proc/sys/kernel/core_uses_pid
1
# ubuntu2204 @ ubuntu2204-VirtualBox in ~/workspace/day1 on git:master x [19:41:39]
$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E
以下是进行的操作
ulimit -c unlimited
sudo bash -c "echo core>/proc/sys/kernel/core_pattern"
然后再次编译运行,终于可以在源文件处生成core了。
3. 提交gdb 调试coredump 的调用栈信息 bt.txt 。
gdb test core.5275
#进入gdb交互界面
(gdb) bt
##########################################
#可以查看,但是打印很麻烦,下面是直接打印语句
#解释:
#-q: 不打印gdb的版权消息
#--batch: 执行批处理,不进入交互模式
#--ex: 执行gdb 命令
#
#"set height 0": 不对输出进行分页
#"thread apply all bt full": 打印所有线程堆栈
##############################################
gdb -q --batch --ex "set height 0" -ex "thread apply all bt full" test core.5275>bt.txt