У меня есть исходный файл в моем проекте, который имеет больше чем 65 536 строк кода (112,444, чтобы быть точным). Я использую "sqlite объединение", которое существует единственного огромного исходного файла.
Я использую MSVC 2005. Проблемы прибывают во время отладки. Все компилирует и связывается хорошо. Но затем когда я пытаюсь ступить в функцию с отладчиком - он показывает неправильную строку кода.
То, что интересно, - то, что различие между корректным номером строки и тем, который показывает отладчик, точно 65536. Это заставляет меня подозревать (почти быть уверенным в) некоторое переполнение короткого целого без знака.
Я также подозреваю, что это не ошибка в самом MSVC. Возможно, это - ограничение формата отладочной информации. Таким образом, формат отладочной информации, используемый MSVC, хранит номера строки как 2-байтовые короткие замыкания.
Есть ли, что-нибудь может быть сделано об этом (кроме вырезания огромного файла в несколько меньших)?
По словам модератора MS, это известная проблема только с отладчиком (компилятор, как вы указали, справляется с ней нормально). Очевидно, что нет никакого обходного пути, кроме использования более коротких исходных файлов. См. официальный ответ на очень похожий вопрос здесь
Если вы посмотрите документацию для символьной отладочной информации, вы увидите используемый тип для номеров строк. Например, параметры line
и столбца
для IDiaSession :: findLinesByLinenum
имеют тип DWORD
.
Изменить: Как указывает @valdo, это еще не означает, что отладчик правильно работает с огромными номерами строк. Поэтому вам нужно использовать более короткие файлы. К сожалению, такое ограничение существует, но даже если бы его не было, я все равно рекомендовал бы вам разделить исходный код.
Вы рассматривали использование WinDBG вместо этого? Это довольно способно, так как команда Windows использует его для отладки O / S, и там есть некоторые файлы biiiig, или, по крайней мере, это было, когда я в последний раз смотрел.
Если вы не изменяете SQLite, вы должны просто верить, что он выполняет свою работу. Вообще не нужно вмешиваться. Перед выпуском SQLite проходит большое количество тестов.