天天看点

linux 排查段错误,利用dmesg排查段错误原因(Geant 4程序)

参考博文:

下面的内容为博主在Geant 4程序设计中遇到的问题。

问题描述

Geant 4 分析闪烁体荧光光子的相关问题,程序计算到某一个event时,程序自动终止,输出错误信息“段错误(核心已转储)”。

在单个程序的“段错误”问题分析中,可以查看core文件(linux系统默认不生成core文件,采用ulimit -c 1024 命令开启并设置文件最大大小),但是在Geant4程序中没有core文件输出(具体原因不知)。因此,在Geant 4程序报错时,输入dmesg,打印错误信息:

$ dmesg

$ exampleB4d[12964]: segfault at 78 ip 00007f2c489cf556 sp 00007f2c3d76b070 error 4 in libG4materials.so[7f2c4898e000+7c000]

反汇编文件内容:( 重点查看前两篇参考文章)

0000000000054530 <_zn25g4materialpropertiestable11getpropertyeib>:

54530:41 57 push %r15

54532:41 56 push %r14

54534:41 55 push %r13

54536:41 54 push %r12

54538:55 push %rbp

54539:53 push %rbx

5453a:89 f3 mov %esi,%ebx

5453c:48 81 ec 98 01 00 00 sub $0x198,%rsp

54543:64 48 8b 04 25 28 00 mov %fs:0x28,%rax

5454a:00 00

5454c:48 89 84 24 88 01 00 mov %rax,0x188(%rsp)

54553:00

54554:31 c0 xor %eax,%eax

54556:48 8b 47 78 mov 0x78(%rdi),%rax # 错误指针所知位置

5455a:48 85 c0 test %rax,%rax

5455d:74 69 je 545c8 <_zn25g4materialpropertiestable11getpropertyeib>

5455f:48 8d 77 70 lea 0x70(%rdi),%rsi

54563:48 89 f1 mov %rsi,%rcx

54566:eb 14 jmp 5457c <_zn25g4materialpropertiestable11getpropertyeib>

54568:0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)

解决方法

对于博主遇到的问题,解决方法是,把调用nist的材料material改为自定义的材料。

标签:dmesg,00,Geant,48,mov,排查,push,rax

来源: https://blog.csdn.net/budong_2017/article/details/110289142