Окно не открывается при запуске программы Rust OpenGL внутри LLDB в Windows - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть минимальное приложение Rust / OpenGL для Windows.Я использую Visual Studio Code, LLDB и Glutin (библиотека, похожая на GLFW).

Запуск через cargo run открывает пустое окно, но при запуске через LLDB окно не открывается.Я подтвердил как в LLDB, так и в println!, что функции создания контекста вызываются и выполняется основной цикл.Другими словами, я проверил, что все строки кода достигнуты.То же самое верно, работает ли он из VSCode или нет.

Я использую 32-битный набор инструментов Rust, stable-i686-pc-windows-gnu, потому что LLDB не полностью поддерживает 64-битную Windows.Помимо этой проблемы, LLDB, кажется, работает как ожидалось.

Ниже приведен main.rs, который адаптирован из Glutin readme .(Glutin - это библиотека Rust, похожая на GLFW.) Я удалил все, кроме самого необходимого для открытия окна.

Желаемое поведение: Окно открывается при запуске программы из LLDB,То же, что и при запуске программы из-за пределов LLDB.

Фактическое поведение: Окно не открывается при запуске программы из LLDB.

Вопрос: Чем можно объяснить эту разницу в поведении?Т.е. почему окно не открывается из LLDB, когда оно открывается из терминала?


extern crate gl;
extern crate glutin;

fn main() {
    let events_loop = glutin::EventsLoop::new();
    let window = glutin::WindowBuilder::new();
    let context = glutin::ContextBuilder::new();

    // When running outside LLDB, this line causes the window to appear.
    // The let binding is necessary because without it, the value will be dropped
    // and the window will close before the loop starts.
    let gl_window = glutin::GlWindow::new(window, context, &events_loop).unwrap();

    // Normally, we'd make the window current here. But it's not necessary
    // to reproduce the problem.
    loop {
        // This is where we'd swap the buffers and clear. But it's not necessary
        // to reproduce the problem.
    }
}

1 Ответ

0 голосов
/ 27 декабря 2018

Частичный ответ: В качестве обходного пути вы можете присоединить LLDB к запущенному процессу вместо запуска процесса из LLDB.В VSCode вы можете сделать это с помощью: Add Configuration -> LLDB: Attach by Name.С этим рабочим процессом окно OpenGL открывается точно так же, как если бы LLDB не был вовлечен.К сожалению, присоединение значительно менее эргономично.

Обновление : я предпочитаю запускать с отладчиком, а не присоединять.Я обнаружил, что набор инструментов Rust MSVC x64 вместе с отладчиком Microsoft C / C ++ хорошо работает для этого случая использования.Шаги, которые работают для меня:

  1. При необходимости установите набор инструментов MSVC: rustup install stable-x86_64-pc-windows-msvc
  2. Установите набор инструментов MSVC по умолчанию: rustup default stable-x86_64-pc-windows-msvc
  3. ОбновлениеRust: rustup update
  4. Установка Расширение Microsoft C / C ++ для кода Visual Studio.Расширение включает отладчик, совместимый с двоичными файлами MSVC, которые компилирует Rust.
  5. Добавьте конфигурацию отладки в код Visual Studio.Я начал с добавления конфигурации по умолчанию, но мне пришлось ее изменить.В конечном счете, это то, что я имел в .vs-code/launch.json - обратите внимание, что строка rust-test уникальна для проекта:

-

{
  "name": "(Windows) Launch",
  "type": "cppvsdbg",
  "request": "launch",
  "program": "${workspaceFolder}/target/debug/rust-test.exe",
  "args": [],
  "symbolSearchPath": "${workspaceFolder}/target/debug/rust-test.pdb",
  "stopAtEntry": false,
  "cwd": "${workspaceFolder}/target/debug",
  "environment": [],
  "externalConsole": true
}

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

...