Я запускаю многопроцессорное приложение, которое всегда дает сбой при выполнении функции, но я мог видеть, что стек этой функции был поврежден, он становится поврежденным, когда он возвращается из вызова функции внутри этой функции. Но когда я попытался распечатать, где изменился стек родительских функций внутри вызываемой функции, он не изменился нигде внутри вызываемой функции, но изменился сразу после возврата из вызываемой функции. Есть идеи, почему стек повреждается только тогда, когда он возвращается из функции? Поскольку я работаю на целевом поле mips, я попытался увидеть, кто пишет в этот стек, используя точку останова адреса через gbdserver. Но есть некоторая проблема с gdbserver: он не отслеживает дочерний процесс, который меня интересует. Есть идеи, как мы можем поймать, кто повреждает стек каким-либо другим способом?

0
Sivakumar Arumugam 24 Авг 2014 в 16:09

2 ответа

Лучший ответ

Используйте Valgrind. Он показывает вам недопустимые операции чтения / записи в память и где они находятся.

0
Mabus 24 Авг 2014 в 12:21

Проверьте память, выделенную в функции. Вполне возможно переполнение буфера. Когда функция возвращается, она освобождает всю память, и в случае незаконной перезаписи памяти существует вероятность сбоя.

0
Arpit 24 Авг 2014 в 14:00