Как подключить к процессу Python изначально? - PullRequest
0 голосов
/ 03 января 2019

Существует C ++ DLL, используемая через взаимодействие C из Python через ctypes.В какой-то момент программа на C ++ понимает, что ее необходимо отладить.Я пытался вызвать __debugbreak() в таких случаях, но процесс Python просто завершается.

Что я могу сделать для отладки C ++ DLL, используемой Python?

Есть много деталей иЯ не уверен, что еще предоставить - пожалуйста, спросите в комментариях.

ОБНОВЛЕНИЕ: в настоящее время целевой платформой является Windows.Я не могу просто присоединиться к процессу Python с помощью Visual Studio, потому что все происходит быстро.Так что, возможно, мне нужно ввести паузу в процесс Python ... но это не выглядит элегантным вариантом.Я бы скорее решил проблему с тем, что Python завершается при вызове __debugbreak()

1 Ответ

0 голосов
/ 05 января 2019

После комментария @RbMm вот решение, которое мне кажется наиболее удобным.

В коде C ++ напишите следующую функцию и сделайте ее доступной для вызова из Python:

#include <windows.h>
#include <string>

__declspec(dllexport) void debug_break() {
    if(!IsDebuggerPresent()) {
        std::string message("The application has requested a debug for process ID=");
        message += std::to_string(GetCurrentProcessId());
        MessageBoxA(nullptr, message.c_str(), "Attach Debugger", 0);
    }
    __debugbreak();
}
...