У нашей команды появилась необходимость отлаживать Blazor WebAssembly приложения в Яндекс.Браузере. Но возникла проблема: Visual Studio упорно не хотел вставать на точки останова. Таких проблем не было ни с Edge, ни с Chrome, хотя все три браузера основаны на Chromium. Полез разбираться, как и что там происходит, хотя в успех особо не верил.

Решил зацепиться за два момента. Обязательное наличие в файле launchSettings.json параметра inspectUri, а также за обязательный вызов метода UseWebAssemblyDebugging. Вначале полез в исходники метода и заметил, что в нём маппится адрес «/_framework/debug». Раз есть адрес, значит по нему должен кто-то обращаться. Скопировал часть кода этого метода, чтобы посмотреть, как он вызывается и с какими параметрами. Две вещи, на которые я обратил внимание. Во-первых, метод вызывается сразу до загрузки страницы, а значит скорее всего вызывается самим Visual Studio, а не приложением. А во-вторых, метод не вызывался для Яндекс.Браузера. В сам же метод передавался параметр для интеграции с DevTools.

Были попытки попробовать вызвать этот метод самостоятельно, но ни к какому успеху в моём случае это не привело. Полез гуглить в репозиториях  .NET упоминание параметра inspectUri, но это тоже к успеху не привело. Упоминание этого параметра было только в репозиториях VS Code, что окончательно убедило меня в мысли, что процесс отладки полностью зашит в закрытых исходниках Visual Studio. И тут я задумался: а как тогда Visual Studio определяет в каком браузере можно отладиться, а в каком нет? На движок браузера, как мы определили, он точно не смотрит. Либо как-то через условный UserAgent он определяет сам браузер (причём зашиты названия только для двух браузеров), либо… он смотрит на название exe файла. Тем более, что в Visual Studio есть возможность добавлять произвольный браузер и как-то он же должен определять его тип. Идея, конечно, показалась мне абсурдной, но я решил попробовать.

Создаём копию browser.exe и переименовываем его в chrome.exe.

Добавляем «новый» браузер

Пробуем отладиться и видим, что у нас всё внезапно получилось!

Выводы из всего написанного, я думаю, вы сделаете сами.

P.S. Уже позже мне дали ссылку на похожую статью (Название имеет значение: как получить оптимизацию, переименовав браузер), поэтому название я сделал в похожем стиле :)

Комментарии (0)