Nano Hash - криптовалюты, майнинг, программирование

Как изначально подключиться к процессу python?

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

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

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

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


  • Какая у вас целевая платформа? Если Unix, вы можете просто использовать gdb для подключения к работающему процессу Python и установить точки останова в общей библиотеке. Если Windows, то, возможно, это поможет. 03.01.2019
  • @ChrisHunt, я обновил пост. 03.01.2019
  • вы можете вставить следующий код для отладки - do Sleep(100); while(!IsDebuggerPresent()); __debugbreak(); или вы можете сказать вызов ZwSuspendProcess(NtCurrentProcess());__debugbreak(); из dll, прикрепить отладчик и вызвать ZwResumeProcess(hProcess); из отдельного кода утилиты.. существует много вариантов отладки 03.01.2019

Ответы:


1

После комментария @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();
}
04.01.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..