Почему я не могу отлаживать?

17

Когда я собирался отлаживать программу на C ++ в VS2005, программа не останавливалась на точки останова.

VS сказал: «Никакие символы не загружаются для любого стека стека вызовов. Исходный код не может быть отображен».

Что я могу сделать?

    
задан MainID 12.02.2009 в 09:52
источник
  • Вы отлаживаете exe или dll? –  Steve Rowe 12.02.2009 в 10:01
  • Это случилось со мной после случайного убийства «mspdbsrv.exe». Убийство детей devenv.exe - это метод, который я иногда использую, чтобы остановить сбор монстров, когда «Отменить сборку» не отвечает. –  Liviu 08.09.2014 в 15:32
  • Попытайтесь выяснить, работает ли ДАЛЬНЕЙШАЯ ИНСТАНЦИЯ (например, версия выпуска вашего приложения) в фоновом режиме! –  Erdinc Ay 21.04.2015 в 19:09

8 ответов

19

Спасибо всем.

Наконец, я нашел решение здесь .

  

Чтобы включить отладку:

     

1) Перейти к Project- & gt; Свойства HelloWorld

     

2) Слева разверните «Свойства конфигурации»

     

3) Разверните «C / C ++»

     

4) Слева выберите «Общие»

     

5) Справа измените «Формат отладочной информации» на «Запрограммировать базу данных для редактирования и продолжения (/ ZI)»

     

5) Слева выберите «Оптимизация»

     

6) Справа измените «Оптимизация» на «Отключено (/ Od)»

     

7) Слева откройте «Linker»

     

8) Слева выберите «Отладка»

     

9) Справа измените «Генерировать информацию отладки» на «Да»

     

10) Нажмите ok

     

11) Установите точки останова

     

12) Перестройте приложение

     

Кроме того, при запуске вашего приложения используйте Ctrl + F5 для его создания и запуска, это позволяет открыть окно консоли достаточно долго, чтобы вы могли видеть свой результат.

    
ответ дан MainID 14.02.2009 в 04:29
  • Вы можете поместить их в сообщение здесь, если эта связь когда-либо перемещается. –  Steve Rowe 14.02.2009 в 04:34
  • +1 Это помогло мне сегодня. –  StackedCrooked 17.03.2011 в 23:58
  • Я пытался это сделать и / ZI несовместим с / clr и / clr: pure. Так что не стоит использовать WinForms или .NET-приложения. –  John 18.10.2011 в 18:08
  • Не помог мне (( –  Yola 22.04.2013 в 17:34
4

Несколько шагов, чтобы попробовать:

  1. Debug- & gt; Step Into (это обеспечит остановку сразу после запуска).
  2. Отладка- & GT; Окна- & GT; модули
  3. Найдите ваш файл foo.exe в списке.
  4. Проверить статус символа. Скажет ли он, что он загружен?
  5. Если нет, перейдите на путь и убедитесь, что:  a) есть файл foo.pdb там  b) метка времени на foo.pdb соответствует foo.exe (или действительно близко)
ответ дан Steve Rowe 12.02.2009 в 10:24
  • @Steve: В каталоге Debug нет * .pdb. –  MainID 13.02.2009 в 18:04
  • Тогда это корень вашей проблемы. Вероятно, это произошло где-то. Пойдите, найдите это и положите его в нужное место. –  Steve Rowe 14.02.2009 в 04:32
3

По какой-либо причине у вас нет правильных символов (.pdb-файлов) в пути символа. Это может быть по нескольким причинам:

1) Ваш двоичный файл был скомпилирован совсем недавно, чем файлы .pdb. Попробуйте перекомпилировать все.

2) Вы пытаетесь отладить DLL и забыли скопировать файлы .pdb. Скопируйте эти файлы.

Также возможно, что ваш код не выполняется, как вы думаете.

    
ответ дан Steve Rowe 12.02.2009 в 09:59
1

Похоже, вы привязываетесь к процессу, а не к обычной сессии отладки? Если вы действительно подключаетесь к процессу, важно убедиться, что двоичные файлы, которые вы пытаетесь отлаживать, были построены с тем же исходным кодом, который в настоящее время открыт в вашей среде IDE.     

ответ дан jpoh 12.02.2009 в 09:58
  • Неправильный исходный код должен по-прежнему прерываться, только в странных местах источника. Если перерыв отсутствует, это, вероятно, проблема с символом, а не проблема с исходным кодом. –  Steve Rowe 12.02.2009 в 10:00
  • , если исходный код не идентичен исходному, он не сломается (я заметил это поведение самостоятельно) –  Andreas Niedermair 12.02.2009 в 10:11
1

Завершите очистку и перестройте, убедившись, что создается .pdb?

    
ответ дан annakata 12.02.2009 в 10:00
0

Я испытал эту проблему (используя c # в VS) при попытке отладки моих модульных тестов.

Вы можете добавить следующий код, который запустит новый экземпляр отладчика, который позволит вам выполнить свой код, как обычно:

System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();
    
ответ дан Stephen Curial 13.02.2009 в 18:15
  • Но я отлаживаю программу на C ++, это помогает? –  MainID 13.02.2009 в 18:16
  • Да, вы можете использовать это с C ++. Вот документация на MSDN: msdn.microsoft.com/en-us/library/... –  Stephen Curial 13.02.2009 в 19:48
0

Просто добавьте еще одну возможность, еще не охваченную MainID:

При отладке я на самом деле запустил какую-то программу, которая вызывается в классы, которые я хотел отлаживать (это что-то вроде добавления). Вызываемая программа частично написана в неуправляемом C ++. Когда я проверил «Включить неуправляемую отладку кода», возникла бы ошибка (и впоследствии программа потерпела крах), потому что у программы не было никакой информации об отладке.

    
ответ дан mort 01.08.2012 в 18:25
0

Я решил эту проблему в WP7, выполнив следующее:

  1. Щелкните правой кнопкой мыши проект из обозревателя решений ( Ctrl + W + S )
  2. Выберите «Перестроить».
  3. Снова выберите проект, щелкните его правой кнопкой мыши и выберите «Развернуть».
  4. Начать отладки (F5)

Надеюсь, это поможет вам!

    
ответ дан creativemujahid 04.07.2013 в 07:45