Странный сбой кода? - PullRequest
       8

Странный сбой кода?

1 голос
/ 10 апреля 2009

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

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

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

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

Ответы [ 4 ]

1 голос
/ 10 апреля 2009

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

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

1 голос
/ 10 апреля 2009
0 голосов
/ 26 августа 2009

Как правило, при попытке справиться со сбоем первым портом захода должен быть отладчик.

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

0 голосов
/ 10 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...