在尝试连接到applet进行调试时,'shmemBase_attach失败:系统无法找到指定的文件'

问题描述 投票:5回答:2

我正在使用netbeans 6.1。

我在java运行时设置中有以下内容:

-agentlib:JDWP =运输= dt_shmem,地址= jdbconn,服务器= Y,暂停=正

以及netbeans中的附加对话框中的以下内容:

调试器:JPDA调试器

连接器:共享内存附加(通过共享内存连接到其他VM)

运输:dt_shmem

名称:jdbconn

我从netbeans Wiki上的FaqDebuggingAppletRemotely页面获得了上述设置。

applet位于aspx页面中(applet,whcih已签名,是一种通过客户端浏览器与传统平台进行通信的方法,我真的是C#开发人员)。我已经设法显示安全警告,这使我有机会附加到applet,但每当我尝试连接时,我看到:

附加到jdbconn

shmemBase_attach失败:系统找不到指定的文件

在netbeans的输出窗口中。

任何帮助感激不尽!

java debugging applet
2个回答
0
投票

使用共享内存选项(transport = dt_shmem)进行调试时,您正在使用Windows内部共享内存对象在调试器和jvm之间进行通信。

这意味着,如果你是:

一个。不是从与jvm相同的物理机器进行调试,或者

湾不适用于Windows操作系统,

您无法在此模式下进行调试。

我不确定如果你在Linux工作站上的VM上运行一个Window会发生什么......可能会工作,也可能不会。

如果上述两种情况都很好,则需要进行更深入的调查以找出问题,但同时,您可以使用普通插座进行连接。

在Java运行时参数中指定:

-Xdebug -Xrunjdwp:transport = dt_socket,server = y,address = 8000,suspend = y

这告诉你的jvm在调试模式下运行,加载jdwp库,等待连接在端口8000中连接,并暂停执行直到这样的连接到达。

在IDE中相应地设置远程调试器。我不知道Netbeans,但它会像Connector = socket连接器,地址= 8000。当您启动网页时,小程序将冻结加载,直到您连接,当然,在它到达监听阶段之前您无法连接。

祝好运!


-1
投票

我敢打赌你的applet运行的JVM安装与你系统上安装的默认JVM安装不同,任何东西(几乎任何东西......或者至少几美元,或者一个cookie)。

要查找浏览器和小程序在Windows 7中使用的JVM安装:

1)关闭所有使用JVM的应用程序(尤其是浏览器)。

2)打开Windows任务管理器(CTRL + ALT + DELETE->任务管理器),然后单击进程选项卡。

3)确保没有运行任何java * .exe进程。

4)打开浏览器并转到applet页面,然后重新启动applet。

5)现在回到任务管理器 - >进程选项卡,找到现在正在运行的java * .exe(它很可能是字面上的“java.exe * 32”,因为它在字面上会有一个asteriks进程的名称。如果你没有看到那个,那么只需使用正在运行的IS)。

6)右键单击该过程,然后在上下文菜单中选择“打开文件位置”。这应该会带您到浏览器用来运行applet的已安装JVM的“bin”文件夹位置!你是否感到惊讶它与你的想法不一样?

要在linux或其他系统上查找任务:

我在Windows上只遇到过这个问题,但无论如何你都是这样做的。

打开shell,然后键入以下内容

ps -e | grep java

并记下pid(s)。

现在您已了解applet正在使用的JVM:

我们需要为该特定安装打开Java控制台(而不是之前我们尝试修改的默认安装)。

要打开applet正在使用的JVM安装的控制台,并设置运行时参数:

1)在JVM安装的bin文件夹中打开命令提示符(shell或其他)。 (在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缓存以确保您的applet使用新参数下载新鲜:

    javaws -uninstall

确保在applet正在使用的JVM安装的bin目录中运行它,因为它可能与Path(或PATH)系统环境变量指向的bin目录不同。

现在从浏览器启动applet,并在NetBeans IDE中创建另一个共享内存连接!在正在调试的正确源代码中设置断点(NetBeans中的“源”选项卡),然后开始使用您的applet。你现在应该看到Netbeans打破了你的破发点!

至少,我希望如此......

© www.soinside.com 2019 - 2024. All rights reserved.