LINUX.ORG.RU

Кросс-платформенная отладка windows из linux

 , , ,


0

2

Здравствуйте!

Изучаю вопрос перехода на ваяние выневских приложений из линукса, т.е. что-то вроде MinGW + KDevelop/QTCreator/CodeBlocks. Со сборкой всё понятно, но вот с отладкой...

Хотелось бы чтобы это выглядело так: на лине запускается виртуалка с гостевой вин7, и я дебажу в ней код из KDevelop, например.

В сети хватает статей по кросс-платформенной отладке через gdb/gdbserver, но обычно это linux-linux для отладки микроконтроллеров. А вот при разных хост/гость ОС возникают вопросы. Вроде где-то в мануалах к gdb читал что ОС должны быть одинаковые.

Ещё бывают частные решения, например для Eclipse есть какой-то плагин который работает напрямую с gdb через ssh. Но Eclipse я не хочу. :)

В общем, буду признателен если поделитесь своими знаниями (а может даже практическим опытом) по этой теме.

Ответ на: комментарий от anonymous

Такой вариант тоже рассматриваю, но не уверен что Вайн корректно и полностью реализует все фичи винапи.

greenbox
() автор топика

Похоже на вопрос ленивого человека :) Напиши хеллоуворлд да проверь. Имхо, можно ещё попробовать qtc и windows sdk в wine.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Кстати, GTK3...

В MinGW тоже можно.

pacman -S base-devel mingw-w64-toolchain mingw-w64-i686-gtk3

anonymous
()

По теме если, то...

в принципе, поставленная Вами задача имеет примерно следующее решение:

1. Пусть винда в виртуалке, предположим, её IP = 192.168.1.13 (на деле похрен, узнайте по месту, я для примера привожу IP и порт ниже). Предполагается что у Вас есть там MinGW. Там должен быть gdbserver. Это у нас будет целевая система. На ней запускаем gdbserver точно так же как и в случае, если бы это была не винда, а линукс — gdbserver localhost:2018 my_windows_app. В терминале должен появиться выхлоп, типа process created, pid = такой-то, listening on port 2018... blah-blah-blah, не важно, в общем.

2. Есть хост, на нём стартуем сам по себе gdb. gdb mu_windows_app. И, далее, цепляемся к сессии gdbserver типа так — (gdb) target remote 192.168.1.13:2018. По идее, всё должно зацепиться по стандартному протоколу gdb, который либо по порту, либо по сети позволяет отлаживаться и можно вести отладку стандартными командами gdb.

Это простейший случай. Возможны варианты. Если надо подключиться к запущенному и исполняющемуся процессу на целевой системе, то на хосте мы даём команду (gdb) attach pid-процесса-на-целевой-системе. Этот PID мы получаем при запуске gdbserver в п.1, выше.

В случае, если надо отлаживать последовательно несколько приблуд и не хочется ваять отдельные сессии, то на целевой системе $ gdbserver --multi localhost:2018. Тогда на хосте стартуем gdb и, далее, в нём: gdb) target extended-remote 192.168.1.13:2018

Remote debugging using 192.168.1.13:2018

(gdb) (gdb) set remote exec-file /my_windows_app (gdb) file /my_windows_app

Ну и дальше стандартными командами.

Я пользуюсь из консольки gdb, УМВР. Как там из среды, я хер его знает, если честно. Как-то не задумывался.

anonymous
()
Ответ на: По теме если, то... от anonymous

Блллл... Как текст поправить? Или надо быть регистрантом?

anonymous
()
Ответ на: комментарий от pon4ik

ЯННП.

Чесслово… Почему-то текст, который внутри тега [ inline ] преобразовался в <span class=«code»><code> … </span></code>, захватив текст вокруг (это я про п.2 в комменте). Всё остальное даже и не знаю как...

Да, у меня это судьба такой — заниматься информбезопасностью. Косяки в решениях нахожу просто непроизвольно даже... =))) На автомате. Убей меня Бог, я даже не представляю себе как оно так получилось... =))) Тэги расставлял аккуратно, а вот поди ж ты...

Прошу прощения, господа, но как-то вот так вышло.

anonymous
()
Ответ на: комментарий от anonymous

Не хуже mingw.

Дело не в mingw. При необходимости ф-ию API можно вызвать и напрямую из DLL, но если её просто нет в вайне, то и вызывать нечего.

greenbox
() автор топика
Ответ на: комментарий от pon4ik

Похоже на вопрос ленивого человека :)

Вы путаете лень (нежелание делать что нужно) с рациональностью (желанием сделать что-то наилучшим образом и с наименьшими усилиями). Но спасибо за участие. :)

greenbox
() автор топика
Ответ на: По теме если, то... от anonymous

в принципе, поставленная Вами задача имеет примерно следующее решение

Хмм... Т.е., как я понял, вы реально дебажили выневскую прогу из линукса (пусть даже в консольке, а не в IDE)? Если так, то всё шикарно. Просто у меня были сомнения что gdb и gdbserver можно связать на неодинаковых ОС.

ЗЫ Кстати, респект за отладку в консольке. Раньше я о таких людях только слышал. И бан за поломку форума. :)

greenbox
() автор топика
Ответ на: комментарий от anonymous

а где она?

Например в user32.dll или ещё где... Или что, вайн у нас реализует всё winapi включая недокументированные ф-ии?

greenbox
() автор топика

Дык...

вы реально дебажили выневскую прогу из линукса (пусть даже в консольке, а не в IDE)?

Да. И не только её. Дело в том, что это вполне нормальный подход для embedding. И тут в принципе не важно какая там ОС (винда, линукс, самострой какой-нибудь), был бы запущен gdbserver и слушал бы он сокет. Всё остальное одинаково. Этот подход работает и для serial и для networking connections.

Для справки https://en.wikipedia.org/wiki/GNU_Debugger, раздел Remote debugging

Просто у меня были сомнения что gdb и gdbserver можно связать на неодинаковых ОС.

Можно. Протокол-то один для обеих сторон.

Кстати, респект за отладку в консольке. Раньше я о таких людях только слышал.

Не буду лукавить, для Sailfish OS у меня есть QtCreator как IDE чисто под эту ОС, для основной работы с GUI (у меня либо XFCE, либо Gnome 3) идёт gnome-builder, а для сонсольного утиля, демонов, embedding и всего такого прочего только vim/gvim и сама сонсоль. Это очешуенно удобно! Учитывая то, что основная работа связана с этим, уже не понимаю как можно бех этого обходится. Там в gdb ещё и со скриптами побаловаться можно. Ну вот например https://sourceware.org/gdb/onlinedocs/gdb/Python.html Тем самым можно облегчить и местами автоматизировать свою работу. А, если гейзенбаг какой приключится, то и искать его проще. Не врукопашную же пытаться сымитировать ошибку... =)

И да, кстати я, оказывается, тут ещё и регистрант... Чумааа! =)))

Moisha_Liberman ★★
()
Ответ на: Можно. от greenbox

Лады.

Пишите если что не заведётся и не взлетит. Помогу чем смогу.

Moisha_Liberman ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.