Как использовать DebugSession.customRequest для запуска произвольной команды GDB и получения результатов - PullRequest
1 голос
/ 23 марта 2019

Я использую API отладки VSCode из расширения.Моя цель - прочитать регистры процессора для программы C ++ из отладчика gdb / lldb во время сеанса отладки.У меня также есть похожие запросы на другие вещи (чтение памяти, разборка и т. Д.), Которые текущие отладчики не предоставляют

У меня есть следующее в моем расширении ... Я могу предоставить полный тестовый пример, если это необходимо.Да, я знаю, что здесь есть ошибка, заключающаяся в том, что после первого ожидания сеанс может перестать быть активным, и у меня не отображается полная проверка ошибок.

static async getRegisters() {
    const session = vscode.debug.activeDebugSession;
    if (session && text) {      // Make sure we still have a session
        // The following gets me the right result
        const sTrace = await session.customRequest('stackTrace', { threadId: 1 });
        const frameId = sTrace.stackFrames[0].id; 

        // The following does execute but the results are printed to debug console
        // rather than returning the result
        // I tried many variations of arguments and contexts types
        const text = '-exec -data-list-register-names';
        const arg : DebugProtocol.EvaluateArguments = {expression: text, frameId: frameId, context:'hover'};
        session.customRequest('evaluate', arg).then((response) => {
            console.log(response.result); 
        });
    }
}

Мне как-то нужны результаты gdbпредоставлено обратно в мое расширение.Вместо этого результаты выводятся на консоль отладки, и я получаю пустую строку.Я также попытался настроить обработчик событий vscode.debug.onDidReceiveDebugSessionCustomEvent для пользовательских команд, но ничего не запускается.Есть ли лучший способ?

Возможно, первый аргумент customRequest не должен быть 'evaluate', но я не вижу ничего другого в спецификации DebugProtocol. для отправки пользовательской командык фактическому отладчику.

1 Ответ

1 голос
/ 15 апреля 2019

Та же проблема! Вот мое решение:

  1. Зарегистрируйте "DebugAdapterTracker" (я думаю, вы уже знаете об этом);
  2. В «onDidSendMessage (message: any)» трекера следует помнить о сообщениях «event», особенно когда «message.event ===« output »»;
  3. Проверьте "message.body.output", сюрприз!

Кажется, вместо ответа с правильными значениями DA напрямую запускает событие для печати на консоли отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...