2012-03-25 2 views
1

Я компилирую sqlite3 с помощью Visual Studio 2008. Когда я пытаюсь выполнить одноэтапную операцию в любой функции sqlite3 (например, sqlite3_open), Visual Studio отображает неправильную строку исходного кода. И это выглядит действительно неправильно. Функция sqlite3_open, как представляется, объявлена ​​в строке 114,788; и когда я нахожусь в одном шаге, это приводит меня к строке 49, 254.Visual Studio 2008 Неправильная исходная строка

Я попытался восстановить все. Я думаю, что я собираю все одинаково (т. Е. Ту же самую библиотеку времени выполнения, формат отладочной информации и т. Д.).

Что я делаю неправильно?

Редактировать: Чтобы скомпилировать sqlite3 для Windows, я создал новый «проект Win32», назвав его «sqlite3», выбрав для него статическую библиотеку и пустой проект. Я добавил «sqlite3.c» в папку «Исходные файлы» под новым проектом «sqlite3» и файл «sqlite3.h» в папку «Заголовочные файлы». В результате компиляции на этом этапе был получен sqlite3.lib.

Вот командная строка передается в п:

/Od /D "WIN32" /D "_DEBUG" /D "_LIB" /D "_MBCS" /Gm /EHsc /RTC1 /MTd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

У меня есть отдельный exe-проект в том же растворе, который я создал, как «Win32 Project» выбор для того, чтобы быть «пустой проект »и« консольное приложение ». Этот проект включает в себя заголовок sqlite3.h, а в качестве «дополнительных зависимостей» я включаю sqlite3.lib. Мой код выглядит следующим образом:

sqlite3 *pDb; 
sqlite3_open("C:\\some.db", &pDb); 

Вхождение в эту функцию приводит меня к неправильной исходной строки в sqlite3.c.

Edit2: Вот ссылка на источник sqlite3, который я скачал: http://www.sqlite.org/sqlite-amalgamation-3071100.zip

А вот документация о том, как построить его таким образом (то есть, просто скомпилировать sqlite3.c в проекте): http://www.sqlite.org/amalgamation.html

Редактировать 3: Для чего это стоит, стек вызовов в моем окне отладки появляется, следуя правильному коду. И использование API правильно приводит к правильным результатам. Кажется, что компиляция работает, строка исходного кода просто неверна.

+0

Как мы можем догадываться, что это мало? –

+0

@ DanielFischer Извините, что еще я должен включить, чтобы помочь определить? – omghai2u

+0

Для начала, точные шаги, которые вы использовали для его компиляции, могут оказаться полезными. –

ответ

5

vs2008, vs2010 и т. Д. Отладчики не могут входить в более чем 65536 строк.

Решение1: поместите любую функцию, в которую вы хотите войти, в 1-й линии 65536, переместив эту часть в огромный файл. Переместить одну главу один раз, я сделал это для отладки GetTable и работал (недочет с * pnColumn)

Solution2: не больше не использовать vs2kXX, вернитесь в VI, Emacs, и т.д .. (Ha..ha ..)

Solution3: вырезать этот огромный файл в самых маленьких, после указания «Включить pcache.h в середине sqliteInt.h» и т.д. и т.п. Но тогда вам придется управлять около 150 000 строк ! .. с сюрпризами, как отсутствует «tcl.h», например, и т. д. и т. д. Хорошая работа, но сообщество поднимет вам статую! ..

Поверьте мне, лучшее решение является # 1.

Благодаря парню или команде, которая дала нам объединение SQLite!

+2

Обратите внимание, что это \ * предполагается \ * фиксировано в VC11. –

+0

Я не уверен, как vi/emacs помогает отлаживать большой исходный файл (вы хотите сказать, что Windbg/Ollydbg/etc вместо названия текстового редактора?), Но спасибо за идентификацию ошибки, тем не менее; вы гораздо полезнее, чем @DanielFischer, который просто снисходит и уходит. – omghai2u

Смежные вопросы