Segmentation fault 调试 转自海哥

EsrCreate时遇到段错误导致程序崩溃

signal(SIGSEGV, signal_handler);

void sig_function(int sig)

{

void *array[100];

size_t size;

char **strframe ;

size_t i;

if(sig == SIGSEGV)

{

EDEBUG(0, "get illegal instruction or segmation fault: %d\n", sig);

size = backtrace (array, 100);

EDEBUG(0, "backtrace() returned %d addresses\n", size);

strframe= backtrace_symbols (array, size);

if(strframe==NULL)

{

perror("backtrace_symbols");

         exit(EXIT_FAILURE);

}

  for(i = 0; i < size; i++)

{

    EDEBUG(0, "frame [%02d] -- %s\n", i, strframe[i]);

  }

}

free(strframe);

signal(sig, SIG_DFL);

    raise(sig);

 

}

通过以上程序代码打印程序运行轨迹和崩溃地址

将源代码目录的c文件编译生产.o文件

powerpc-none-linux-gnuspe-c++ -g --rdynamic -c main.cpp

使用一下命令连接生成带debug信息的可执行文件

powerpc-none-linux-gnuspe-c++ -o demo  m_pthread.o main.o aitalk.o -lpthread -lstdc++ -ldl  ./Aitalk/Lib/Aitalk5.a  ./gbuni/gbuni.a 

使用以下命令反汇编生产汇编文件

powerpc-none-linux-gnuspe-objdump  -S -D -t demo  >test.txt

然后根据以下程序语音打印地址在汇编文件中查找程序崩溃位置和函数进行调试

=========>>>catch signal 11 <<<=========

Dump stack start...

backtrace() returned 11 addresses

  [00] ./demo [0x10002b88]

  [01] ./demo [0x10002e60]

  [02] [0x100344]

  [03] ./demo [0x100d3a08]

  [04] ./demo [0x1000c960]

  [05] ./demo [0x10006658]

  [06] ./demo [0x100049fc]

  [07] ./demo [0x10004d2c]

  [08] ./demo [0x10002a90]

  [09] /lib/libc.so.6 [0xfbbfd18]

  [10] /lib/libc.so.6 [0xfbbfe34]

Dump stack end...

Segmentation fault

[user@P10xxCPB home]$ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值