Я использовал gdb для присоединения программы, а затем установил точку останова в функции engine :: monAppendSystemInfo. Когда была достигнута точка останова, gdb coredump (на самом деле, это моя программа разбилась в engine :: monAppendSystemInfo). Это не неизбежная проблема. Он появлялся только дважды и не может быть воспроизведен.
Вот сравниваемый ассемблерный код engine :: monAppendSystemInfo.
Приведенный ниже код дизассемблирован из файла coredump:
Dump of assembler code for function engine::monAppendSystemInfo(bson::BSONObjBuilder&, unsigned int):
0x00000000011188f1 <+0>: push %rbp
0x00000000011188f2 <+1>: mov %rsp,%rbp
0x00000000011188f5 <+4>: push %r12
0x00000000011188f7 <+6>: push %rbx
0x00000000011188f8 <+7>: sub $0xb20,%rsp
0x00000000011188ff <+14>: mov %rdi,-0xa98(%rbp)
0x0000000001118906 <+21>: mov %esi,-0xa9c(%rbp)
0x000000000111890c <+27>: int3 // strange point
=> 0x000000000111890d <+28>: mov 0x28,%rax // crash for accessing 0x28
0x0000000001118915 <+36>: mov %rax,-0x18(%rbp)
• 1007
root@lyysdbserver1:~# g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
root@lyysdbserver1:~# gdb --version
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
Почему "% fs: 0x28" было изменено на "0x28"? Это ошибка gdb?