ST源码分析-coredump - 弦外之音

/ 0评 / 0

core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)


之前说过 ST 协程的栈内存大概是 64k 左右,如果我访问超过这个地址,就会产生 SIGSEGV信号,进而生成 coredump 文件。代码如下:

#include <stdio.h>
#include <memory.h>
#include "st.h"
#include "../common.h"
​
void *do_somethins(void *arg) {
    char str[1] = "a";
    __asm__("movq %rdx,(-64830)(%rsp)");
    return NULL;
}
​
int main(int argc, char *argv[]) {
    st_init();
    st_thread_create(do_somethins, NULL, 0, 0);
    st_thread_exit(NULL);
​
    /* NOTREACHED */
    return 1;
}
​

执行以下命令,让ubuntu操作系统可以生成 core 文件。

# ubuntu 停止 apport 服务
sudo service apport stop
# 
ulimit -c unlimited


运行情况如下图:

从上图可以看到,core 文件已经生成了。现在就来讲解一些如何使用这个 core 文件来定位出现问题的代码。

运行命令 gdb ./lookupdns core,如下图,一下子就看到错误的代码了。


相关阅读:

  1. 在ubuntu中进行core dump调试
  2. linux core dump 文件 gdb分析
  3. 为调试进程产生core dump文件

由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。QQ:2338195090。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注