Странный сбой в программе CLinux

Ответить
Anonymous
 Странный сбой в программе C

Сообщение Anonymous »

У нас есть сервис (написанная в C), развернутая в нескольких случаях в среде AWS EC2. Мы видели несколько сбоев в 2 конкретных экземплярах, где обратная промышленность в дампе ядра показывает, что он сбои при вызове нулевого обратного вызова. < /P>
Исходный код выглядит так: < /p>

Код: Выделить всё

if (cb != NULL) {
cb(arg);
}
/* continue */
Код сборки, переведенный Disassemble Command в GDB показывает:
: test %rax,%rax
: je 0xNNN
: mov %rbp,%rdi
: callq *%rax 0xNNN: mov %rbp,%rdi
< /code>
Мы также проверили информацию регистрации и получили: < /p>
(gdb) info registers rax
rax 0x0 0
(gdb) info registers rip
rip 0x0 0x0
< /code>
Так что звучит так, как будто он сбои при вызове функции с помощью нулевого адреса, но нулевая проверка прямо перед вызовом. Логика кода может быть выполнена на всех развернутых экземплярах, но она всегда вылетает на 2 из них. Я никогда не видел подобную проблему в течение десятилетий в качестве разработчика C. У нас заканчиваются идеи, и, пожалуйста, проливайте некоторые огни на это на случай, если у вас есть похожий опыт.>

Подробнее здесь: https://stackoverflow.com/questions/794 ... -c-program
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»