Подтвердить что ты не робот

Debugger показывает npos = 4294967295 при просмотре строковых переменных

Моя проблема в основном заключается в том, что всякий раз, когда я отлаживаю использование Visual Studio (выпуск Community Community на компьютере под Windows 10), и я пытаюсь навести курсор на переменную или посмотреть на переменную в разделе locals или autos отладочного представления, 'видеть фактические данные, сохраненные в переменной.

Это проблема, которую я видел как с строками, так и с векторами. Для строк он отобразит npos = 4294967295

и если вы продолжаете нажимать стрелки вниз, вы, в конце концов, получите фактическую строку, сохраненную в этой переменной; только после копания во внутреннюю структуру переменной, например std::_String_alloc и _Mypair и _Myval и т.д. То же самое для векторов.

Кто-нибудь когда-либо испытывал эту проблему или знает, как ее исправить?

4b9b3361

Ответ 1

У меня была та же проблема. Я предполагаю, что вы отлаживаете неуправляемую (родную) С++ DLL, которая является частью решения, использующего управляемый EXE? В моем случае у меня есть С# WPF EXE, который выполняет функции PInvokes в неуправляемой С++ DLL.

"Исправления", которые работали в моем случае:

FIX 1: Снимите флажок "Использовать режим совместимой совместимости" в настройках отладчика: Вы можете сделать это в Инструменты/Параметры/Отладка/Общие. Смотрите: fooobar.com/questions/189012/.... Для обсуждения того, что такое режим управляемой совместимости и почему вы его обычно не проверяете, см. http://blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/switching-to-managed-compatibility-mode-in-visual-studio-2013.aspx

"FIX" 2: В качестве частичной работы вы можете сначала начать свой процесс без отладчика (Ctrl + F5), затем присоединить отладчик VS2015 к вашему процессу (Debug/Attach-to-Process), но только выберите "Native code" с помощью "Attach to/Select...". Теперь, когда точка останова в вашей родной С++ DLL попала, вы можете нависнуть над переменными std::string, а VS2015 покажет их полное содержимое, как ожидалось, включая их членов данных. Недостатком этой совместной работы является то, что вы не сможете одновременно отлаживать управляемый код (например, С# или CppCli).

Ответ 2

В свойствах проекта выберите Отладка- > Тип отладки- > Только для родных. В моем случае это было Mixed

Ответ 3

4294967295 0xffffffff - это 32-битное слово со всеми одним битом. На большинстве машин это также (unsigned)-1, которое является обычной константой str:: npos.

Кстати, вы пытались использовать GCC для компиляции кода с помощью g++ -Wall -g? Затем используйте gdb для отладки.