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

时间:2011-03-21 15:48:36

标签: java debugging applet

我正在使用netbeans 6.1。

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

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

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

调试器:JPDA调试器

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

传输:dt_shmem

名称:jdbconn

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

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

附加到jdbconn

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

在netbeans的输出窗口中。

感激不尽的任何帮助!

2 个答案:

答案 0 :(得分: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 :(得分:-1)

我敢打赌你的小程序运行的JVM安装与你系统上安装的默认JVM安装不一样(几乎任何东西......至少几块钱,或者一个cookie)。< / p>

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

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

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

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

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

5)现在回到任务管理器 - &gt;进程选项卡,查找正在运行的java * .exe(很可能是“java.exe * 32”字面意思,因为它确实会有字面意思过程名称中的星号。如果你没有看到那个星号,那么只需使用IS运行的那个。)

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

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

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

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

ps -e | grep java

记下pid。

现在您知道您的小程序正在使用哪个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打破了你的破发点!

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