当前位置: 首页 > 知识库问答 >
问题:

IntelliJ 13:共享内存调试Spring Boot应用程序一步到位

夹谷星剑
2023-03-14

我有一个Spring启动应用程序。我使用IntelliJ 13。

我想在调试模式下启动我的应用程序并对其进行调试。我在Windows上,我想使用共享内存。我希望能够单击调试图标或单个maven目标,然后应用程序以调试模式启动,IDE附加调试器。这就是我习惯于调试大多数java应用程序的方式。

然而,混合Spring-boot和IntelliJ似乎使事情变得复杂。当我按下绿色“调试”按钮并且我找不到方法来更改绿色“调试”按钮的功能确定连接到的共享内存地址时,IntelliJ似乎想要连接到错误的进程

我最接近的是在pom.xml中向maven目标添加jvm选项,然后如果我添加了远程运行配置,IntelliJ允许我指定一个与我在pom中编写的内容相匹配的共享内存地址。这需要多次单击来启动应用程序,然后对其进行调试。它的工作方式与使用notepad.exe编写代码的工作方式相似。因此我的问题。

有没有使用共享内存的一步解决方案?

此问题的变体:使用Spring-boot和IntelliJ调试jsp

然而,问题和答案仅限于使用套接字。

共有2个答案

金飞
2023-03-14

使用Sockets的一键式解决方案(在IntelliJ IDEA 14.0.1上测试):

  • 打开运行/调试配置,添加远程类型的新配置

spring boot:run“-Drun.jvmArguments=-Xdebug-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005”

suspend=n选项对于避免Maven目标在等待调试器连接时被锁定非常重要。

之后,您将能够执行此调试任务,您的应用程序将启动并附加调试器。

勾渝
2023-03-14

问题是IntelliJ使用Maven goalspring boot:run作为启动配置,试图调试它会导致调试器连接到错误的进程。

设置Application类型的新启动配置,并使用main()方法将其指向项目的类,可以解决此问题。

感谢评论者建议这是解决问题的方法!

 类似资料:
  • 共享内存是两个或多个进程共享的内存。 但是,为什么我们需要共享内存或其他通信方式呢? 重申一下,每个进程都有自己的地址空间,如果任何进程想要将自己的地址空间的某些信息与其他进程进行通信,那么只能通过IPC(进程间通信)技术进行。 我们已经知道,通信可以在相关或不相关的进程之间进行。 通常,使用管道或命名管道来执行相互关联的进程通信。 可以使用命名管道或通过共享内存和消息队列的常用IPC技术执行无关

  • 我正在使用FB。允许用户使用此代码共享我的页面的ui: 当从 Android 移动应用程序中的嵌入式浏览器共享页面时,用户可以选择要用于打开共享对话框的应用程序。如果选择了脸书应用,则不会有回调响应。在普通的桌面浏览器中,一切都按预期工作。这种行为是预期的吗?

  • EasySwoole对Swoole table进行了基础的封装。 方法列表 getInstance() 该方法用于获取TableManager管理器实例 add($name,array $columns,$size = 1024) 该方法用于创建一个table get($name):?Table 该方法用于获取已经创建好的table 示例代码 TableManager::getInstance()

  • shmat是shared memory attach的缩写。而attach本意是贴的意思。 如果进程要使用一段共享内存,那么一定要将该共享内存与当前进程建立联系。即经该共享内存挂接(或称映射)到当前进程。 shmdt则是shmat的反操作,用于将共享内存和当前进程分离。在共享内存使用完毕后都要调用该函数。 函数原型 #include <sys/types.h> #include <sys/shm.

  • 共享内存的控制 函数原型 #include <sys/ipc.h> #include <sys/shm.h> int shmctl(int shmid, int cmd, struct shmid_ds *buf); 参数 shmid 由shmget函数生成,不同的key值对应不同的id值。 cmd 操作字段,包括: 公共的IPC选项(ipc.h中): IPC_RMID //删除 IPC_SET

  • 创建共享内存,通过key返回id。 函数原型 #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg); 参数 key 不消多说 size 欲创建的共享内存段的大小 shmflg 共享内存段的创建标识: 公共的IPC选项(在/usr/include/linux/ipc.h中定义)