Не удалось получить shmemBase_attach: система не может найти указанный файл при попытке присоединить апплет для отладки - PullRequest
5 голосов
/ 21 марта 2011

Я использую netbeans 6.1.

В настройках времени выполнения Java у меня есть следующее:

-agentlib: jdwp = transport = dt_shmem, address = jdbconn, server = y, suspend = n

и следующее в диалоговом окне присоединения в NetBeans:

Отладчик: JPDA Отладчик

Соединитель: Присоединение к общей памяти (Присоединение общей памяти к другим виртуальным машинам)

Транспорт: dt_shmem

Имя: jdbconn

Я получил вышеуказанные настройки со страницы FaqDebuggingAppletRemotely на вики NetBeans.

Апплет находится на странице aspx (апплет, подписанный, является методомобщаясь через браузер клиента с устаревшей платформой, я действительно разработчик на C #).Мне удалось отобразить предупреждение системы безопасности, которое дает мне возможность подключиться к апплету, но всякий раз, когда я пытаюсь подключиться, я вижу:

Подключение к jdbconn

shmemBase_attach не удалось: система не может найти указанный файл

в окне вывода в NetBeans.

Любая помощь с благодарностью получена!

Ответы [ 2 ]

0 голосов
/ 14 марта 2013

Я бы поспорил на что угодно (почти на все ... может быть, на несколько долларов или на cookie), что установка JVM, на которой работают ваши апплеты, НЕ совпадает с установкой JVM по умолчанию, установленной в вашей системе.

Чтобы найти установку JVM, которую использует ваш браузер и апплеты в Windows 7 :

1) Закройте все приложения, использующие JVM (особенно браузер).

2) Откройте диспетчер задач Windows (CTRL + ALT + DELETE-> Диспетчер задач) и щелкните вкладку процессов.

3) Убедитесь, что не запущены процессы java * .exe.

4) Откройте браузер, перейдите на страницу апплетов и снова запустите апплет.

5) Теперь вернитесь на вкладку «Диспетчер задач-> Процессы» и найдите запущенный java * .exe (скорее всего, это будет буквально «java.exe * 32», так как буквально он будет иметь звездочки в имени процесса. Если вы этого не видите, просто используйте тот, который работает).

6) Щелкните правой кнопкой мыши по этому процессу и в контекстном меню выберите «Открыть местоположение файла». Это должно привести вас в папку «bin» установленной JVM, которую ваш браузер использует для запуска ваших апплетов! Вы удивлены, что это не то, что вы думали?

Чтобы найти задачу в Linux или других системах :

У меня когда-либо была эта проблема только в Windows, но вот как ты это делаешь.

Откройте оболочку и введите следующее

ps -e | grep java

И запишите pid (s).

Теперь, когда вы знаете, какую JVM используют ваши апплеты :

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

Чтобы открыть консоль установки JVM, которую используют ваши апплеты, и установить параметры времени выполнения:

1) Откройте командную строку (оболочка или что-то еще) в папке bin установки JVM. (В проводнике Windows 7 вы можете нажать + правую кнопку мыши на папке bin и выбрать «Открыть командную строку здесь»).

2) Запустите следующую команду, чтобы открыть консоль:

    javaws -viewer

Это также приводит к открытию окна «Java Cache Viewer», которое нам не нужно. Закройте это окно, но оставьте окно «Панель управления Java» открытым.

3) Теперь вы можете перейти на вкладку Java, щелкнуть мышью на представлении и изменить параметры времени выполнения так же, как вы делали это раньше:

    -agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n

4) Нажмите «ОК», а затем нажмите «Применить» в главном окне консоли Java, чтобы применить и сохранить все внесенные изменения.

5) ПОДОЖДИТЕ! И последнее, что я предлагаю вам сделать; очистите кеш java WebStart, чтобы убедиться, что ваши апплеты загружаются свежо, используя новые параметры:

    javaws -uninstall

Обязательно запустите это в каталоге bin той установки JVM, которую используют ваши апплеты, поскольку это может быть не тот каталог bin, на который указывает системная переменная среды Path (или PATH).

Теперь запустите ваш апплет из браузера и создайте еще одно соединение с общей памятью в вашей среде IDE NetBeans! Установите точки останова в правильном исходном коде, который вы отлаживаете (вкладка «источник» в NetBeans), и начните использовать свой апплет. Теперь вы должны увидеть, что Netbeans ломает ваши точки останова!

По крайней мере, я на это надеюсь ...

0 голосов
/ 11 января 2012

Когда вы отлаживаете с помощью опции общей памяти (transport = dt_shmem), вы используете объекты внутренней разделяемой памяти Windows для связи между отладчиком и jvm.

Это означает, что если вы:

а. Не отлаживать с той же физической машины, что и ваш jvm, или

б. Не работает в ОС Windows,

Вы не можете отлаживать в этом режиме.

Я не уверен, что произойдет, если вы запустите Window на виртуальной машине на станции Linux ... Может работать, а может и нет.

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

В параметрах времени выполнения Java укажите:

-Xdebug -Xrunjdwp: транспорт = dt_socket, сервер = y, адрес = 8000, приостановить = y

Это говорит о том, что ваш jvm должен работать в режиме отладки, загружать библиотеку jdwp, ждать подключения к порту 8000 и приостанавливать выполнение до тех пор, пока такое соединение не появится.

В вашей IDE установите соответствующий удаленный отладчик. Я не знаю Netbeans, но это было бы что-то вроде Connector = сокет разъем, адрес = 8000. Когда вы запускаете веб-страницу, апплет останавливает загрузку до тех пор, пока вы не подключитесь, и, конечно, вы не сможете подключиться, пока он не достигнет стадии прослушивания.

Удачи!

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