Ошибка, которую мы отслеживаем, возникает в конкретной встроенной среде на основе VxWorks (поставщик изменил материал на неизвестное расширение и предоставляет уровень абстракции для большей части VxWorks).У нас есть две задачи с разными приоритетами, выполняемые примерно каждые 100 мс.Задача с более высоким приоритетом просто подсчитывает, добавляет добавляет, подсчитывает целое число (точно так же, как она делает что-нибудь), в то время как задача с более низким приоритетом создает строку, например:
std::string text("Some text");
Обратите внимание, что нет общегосостояние между этими задачами вообще.Они оба работают исключительно с автоматическими локальными переменными.
При каждом запуске каждая задача делает это сто раз, так что вероятность возникновения состояния гонки выше.Приложение работает нормально в течение пары минут, а затем загружает процессор с 5% до 100% и остается там.Кажется, все время используется задачей, которая создала строку.До сих пор мы не смогли воспроизвести поведение без использования std::string
.
Мы используем GCC 4.1.2 и работаем на VxWorks 5.5.Программа работает на Pentium III.
Я попытался проанализировать, что там происходит, но я не могу ввести ни один из string
-методов с помощью отладчика, и добавление операторов print в basic-string некажется, работает (это был фон для этот мой вопрос ).Я подозреваю, что что-то там повреждает стек, что приводит к петле питания.У меня вопрос, есть ли какая-либо известная ошибка в старых версиях VxWorks, которая могла бы объяснить это?Если нет, есть ли у вас какие-либо дальнейшие предложения, как диагностировать это?Я могу получить разборки и дампы стека, но у меня нет опыта в интерпретации.Может ли кто-нибудь предоставить несколько указателей ?