Никакие символы не загружаются для C++ при смешанной отладке (из Python)Python

Программы на Python
Ответить
Anonymous
 Никакие символы не загружаются для C++ при смешанной отладке (из Python)

Сообщение Anonymous »

У меня есть большой проект, в котором большая часть трудоемких вычислений написана на C++, а «связывающий код» и стартовый скрипт написаны на Python. Код уже несколько лет компилируется с помощью компилятора VS 2017 (V141) и Python 3.7.0-32bit, и я хочу перейти на V143 и Python 3.10-64. Я могу создать и запустить код в новой среде. При запуске набора тестов я получаю небольшие ошибки (вероятно, из-за перехода с 32-разрядной версии на 64-разрядную).
Проблема возникает, когда я пытаюсь отладить код C++ в Visual Studio 2022. Я могу отладить код Python без каких-либо ошибок, но когда я хочу отладить код, я не могу загрузить символы из C++.
Я пытался следовать этому руководству: https://learn.microsoft.com/en-us/visua ... ew=vs-2022
(Но мне не удается включить как Native, так и Python на шаге 2 раздела Включить отладку в смешанном режиме в проекте Python. Когда я выбираю Python в типе «Выбор кода», я получаю эту ошибку: «Отладка Python несовместима с Native. Хотите снять флажок Native?» Аналогично, я не нашел опции «Отладка Python/Native» на шаге 2 «Включить отладку в смешанном режиме в проекте C/C++», и я установил собственные инструменты разработки Python с помощью установщика VS и т. д.)
Обновить:
Чтобы упростить и показать простой случай, я выполнил это руководство и смог создать и установить точки останова, когда я начал отладку с проектом C++ в качестве запускаемого проекта (как описано в руководстве YouTube). Проблема возникает, когда я пытаюсь сделать это с помощью PythonApplication в качестве запускаемого проекта. (Я пробовал использовать как Python39-64, так и Python310-64)
Я добавил содержимое необходимых файлов, чтобы воспроизвести проблему. Это файл решения:

Код: Выделить всё

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32929.385
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spam", "spam\spam.vcxproj", "{18FA7E0B-56F8-433D-ABCC-523E412FFB83}"
EndProject
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "PythonApplication", "PythonApplication\PythonApplication.pyproj", "{DD2AA21D-1713-4B24-AB58-2695C05684C1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Debug|Any CPU.ActiveCfg = Debug|x64
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Debug|Any CPU.Build.0 = Debug|x64
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Debug|x64.ActiveCfg = Debug|x64
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Debug|x64.Build.0 = Debug|x64
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Debug|x86.ActiveCfg = Debug|Win32
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Debug|x86.Build.0 = Debug|Win32
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Release|Any CPU.ActiveCfg = Release|x64
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Release|Any CPU.Build.0 = Release|x64
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Release|x64.ActiveCfg = Release|x64
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Release|x64.Build.0 = Release|x64
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Release|x86.ActiveCfg = Release|Win32
{18FA7E0B-56F8-433D-ABCC-523E412FFB83}.Release|x86.Build.0 = Release|Win32
{DD2AA21D-1713-4B24-AB58-2695C05684C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DD2AA21D-1713-4B24-AB58-2695C05684C1}.Debug|x64.ActiveCfg = Debug|Any CPU
{DD2AA21D-1713-4B24-AB58-2695C05684C1}.Debug|x86.ActiveCfg = Debug|Any CPU
{DD2AA21D-1713-4B24-AB58-2695C05684C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DD2AA21D-1713-4B24-AB58-2695C05684C1}.Release|x64.ActiveCfg = Release|Any CPU
{DD2AA21D-1713-4B24-AB58-2695C05684C1}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A9526BE0-4988-4327-B7A0-AFD3DF109D47}
EndGlobalSection
EndGlobal
Это файл PythonApplication.pyproj:

Код: Выделить всё


Debug
2.0
dd2aa21d-1713-4b24-ab58-2695c05684c1
.
PythonApplication.py


.
.
PythonApplication
PythonApplication
MSBuild|venv10|$(MSBuildProjectFullPath)
Standard Python launcher
True


true
false


true
false






venv10
3.10
venv10 (Python 3.10 (64-bit))
Scripts\python.exe
Scripts\pythonw.exe
PYTHONPATH
X64










Это файл PythonApliction.py:

Код: Выделить всё

import spam
print(spam.add_one(123))
Это мой файл spam.vcxproj:

Код: Выделить всё




Debug
Win32


Release
Win32


Debug
x64


Release
x64



16.0
Win32Proj
{18fa7e0b-56f8-433d-abcc-523e412ffb83}
spam
10.0



Application
true
v143
Unicode


Application
false
v143
true
Unicode


DynamicLibrary
true
v143
Unicode


Application
false
v143
true
Unicode




















c:\Python310-64\include;$(IncludePath)
$(SolutionDir)\PythonApplication\
.pyd



Level3
true
WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true


Console
true




Level3
true
true
true
WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true


Console
true
true
true




Level3
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true


Console
true
C:\Python310-64\libs;%(AdditionalLibraryDirectories)




Level3
true
true
true
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true


Console
true
true
true












Мой main.cpp:

Код: Выделить всё

#include "include.h"

PyObject* some_function(PyObject* self, PyObject* args)
{
__int64 input_value;
if (!PyArg_ParseTuple(args, "L", &input_value))
{
goto error;
}
return PyLong_FromLongLong(input_value + 1);
error:
return 0;

}

PyMethodDef SpamMethods[] =
{
{"add_one",(PyCFunction)some_function, METH_VARARGS, 0},
{0,0,0,0}
};

static struct PyModuleDef spammodule = {
PyModuleDef_HEAD_INIT,
"spam",   /* name of module */
"spam_doc", /* module documentation, may be NULL */
-1,       /* size of per-interpreter state of the module,
or -1 if the module keeps state in global variables. */
SpamMethods
};

PyMODINIT_FUNC
PyInit_spam(void)
{
return PyModule_Create(&spammodule);
}
Наконец, вот мой файл include.h:

Код: Выделить всё

#if defined(_MSC_VER) && defined(_DEBUG)
#undef _DEBUG
#include
#define _DEBUG 1
#else
#include 
#endif
Поэтому, когда я отлаживаю проект C++ как запускаемый проект, я могу установить (и использовать) точки останова в файле main.cpp. Когда я пытаюсь запустить код с PythonApplication в качестве запускаемого проекта, я могу использовать точки останова в своем коде Python до тех пор, пока не активирую встроенную отладку, тогда символы для проекта C++ не загружаются, программа запускается, печатает результат и завершается, но не достигает ни одной точки останова в Python или C++. Есть идеи, чего мне не хватает?
**Мой исходный текст: **
Я создал код с информацией об отладке и т. д. и включил встроенную отладку в проекте Python в VS 2022, и когда я запускаю код с отладкой, точки останова в C++ не срабатывают. (Файлы pdb, pyd, lib и exp должны иметь расширение имя_проекта.cp310-win_amd64.pdb для Python 3.10-64, верно?)
Я также вижу, что он не загружает символы для моих 4 проектов C++ (скриншот загруженных модулей после приостановки отладки во время выполнения кода):
Изображение

По сравнению со списком модулей при запуске проекта с Python 3.7.0:
Изображение

Я пытался запустить проект в vscode, но мне тоже не удалось загрузить отладку. Есть какие-нибудь предложения о том, как загрузить символы?

Подробнее здесь: https://stackoverflow.com/questions/741 ... rom-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»