Странная проблема сбоя кода?

У меня есть рабочее пространство MSVC 6.o, в котором есть весь код C.
Код выполняется без какого-либо переключателя оптимизации, т. е. с параметром O0, и в режиме отладки. Этот код получен от какой-то третьей стороны. Он выполняет желаемое как есть.

Но когда я добавляю некоторые операторы printf в определенные функции для отладки, а затем выполняю код, происходит сбой.

Я подозреваю, что это какое-то переполнение кода/данных через страницу памяти/сегмент памяти или что-то подобное. Но в коде нет спецификатора карты памяти или командного файла компоновщика, в котором упоминаются сегменты/карта памяти и т. д.

Как мне сузить причину и исправить эту причудливую проблему?


person goldenmean    schedule 10.04.2009    source источник


Ответы (4)



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

Также возможно, что только printf() вызывает сбой. Возможная причина — но маловероятная в Windows — это слишком маленький стек, который переполняется вызовом printf().

person Hexagon    schedule 10.04.2009

Используйте string.getbuffer при печати объектов cstring в printf. Может возникнуть проблема с широким символом и обычной строкой. printf("%s",str.Getbuffer()); ул.ReleaseBuffer(); Привет, Атул.

person Community    schedule 10.04.2009

В общем случае, когда вы пытаетесь справиться со сбоем, в первую очередь вам следует обратиться к отладчику.

При правильном использовании это позволит вам сузить вашу проблему до конкретной строки кода и, надеюсь, даст вам представление о оперативной памяти в момент сбоя. Это позволит вам увидеть непосредственную причину сбоя.

person Captain Lepton    schedule 26.08.2009