Last active
          April 18, 2025 18:45 
        
      - 
      
- 
        Save T3sT3ro/e43b714ee6ca97ec4b0cb65fc606ffac to your computer and use it in GitHub Desktop. 
Revisions
- 
        T3sT3ro revised this gist Aug 25, 2024 . No changes.There are no files selected for viewing
- 
        T3sT3ro renamed this gist Sep 18, 2022 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewingFile renamed without changes.
- 
        T3sT3ro revised this gist Aug 1, 2021 . 1 changed file with 2 additions and 0 deletions.There are no files selected for viewingThis file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,5 +1,7 @@ # So you want to launch RenderDoc with Java, huh? [Here is a good resource to check out first](https://lwjglgamedev.gitbooks.io/3d-game-development-with-lwjgl/content/appendixa/appendixa.html) First of all, check what command is run when you in fact launch your app. For me (Create minecraft mod) this command was executed when I run `runClient` configuration (line breaks, tabs and backslashes added for readability): ## Step 1. command for running minecraft with mods - generated by gradle 
- 
        T3sT3ro created this gist Jul 13, 2021 .There are no files selected for viewingThis file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,153 @@ # So you want to launch RenderDoc with Java, huh? First of all, check what command is run when you in fact launch your app. For me (Create minecraft mod) this command was executed when I run `runClient` configuration (line breaks, tabs and backslashes added for readability): ## Step 1. command for running minecraft with mods - generated by gradle ``` /home/tooster/.sdkman/candidates/java/14.0.1-open/bin/java -Dforge.logging.console.level=info -Dfml.earlyprogresswindow=false -Dmixin.env.disableRefMap=true -javaagent:\ /home/tooster/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/211.7442.40/lib/idea_rt.jar=36385:\ /home/tooster/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/211.7442.40/bin -Dfile.encoding=UTF-8 -classpath /home/tooster/workspace/ttr/Create/build/classes/java/main:\ /home/tooster/workspace/ttr/Create/build/resources/main:\ /home/tooster/.gradle/caches/forge_gradle/deobf_dependencies/com/tterrag/registrate/Registrate/MC1.16.5-1.0.4_mapped_snapshot_20200920-mixed-1.16.3/Registrate-MC1.16.5-1.0.4_mapped_snapshot_20200920-mixed-1.16.3.jar:\ /home/tooster/.gradle/caches/forge_gradle/deobf_dependencies/com/jozufozu/flywheel/Flywheel/1.16-0.0.3.20_mapped_snapshot_20200920-mixed-1.16.3/Flywheel-1.16-0.0.3.20_mapped_snapshot_20200920-mixed-1.16.3.jar:\ /home/tooster/.gradle/caches/forge_gradle/deobf_dependencies/com/ferreusveritas/dynamictrees/DynamicTrees-1.16.5/0.10.0-Beta12.1_mapped_snapshot_20200920-mixed-1.16.3/DynamicTrees-1.16.5-0.10.0-Beta12.1_mapped_snapshot_20200920-mixed-1.16.3.jar:\ /home/tooster/workspace/ttr/Create/build/fg_cache/net/minecraftforge/forge/1.16.5-36.1.32_mapped_snapshot_20200920-mixed-1.16.3/forge-1.16.5-36.1.32_mapped_snapshot_20200920-mixed-1.16.3-recomp.jar:\ /home/tooster/workspace/ttr/Create/build/fg_cache/net/minecraftforge/forge/1.16.5-36.1.32_mapped_snapshot_20200920-mixed-1.16.3/forge-1.16.5-36.1.32_mapped_snapshot_20200920-mixed-1.16.3-launcher.jar:\ /home/tooster/.gradle/caches/forge_gradle/minecraft_repo/versions/1.16.5/client-extra.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.minecraftforge/mergetool/1.0.9/d1e1ba354a40b5703340b5cb02fdca489cff3646/mergetool-1.0.9-api.jar:\ /home/tooster/.gradle/caches/forge_gradle/maven_downloader/de/oceanlabs/mcp/mcp_snapshot/20200920-mixed-1.16.3/mcp_snapshot-20200920-mixed-1.16.3.zip:\ /home/tooster/.gradle/caches/modules-2/files-2.1/cpw.mods/modlauncher/8.0.9/bb848f57758808692b9108df61c909c0a961ba81/modlauncher-8.0.9.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/9.0/5a34a3a9ac44f362f35d1b27932380b0031a3334/asm-commons-9.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-util/9.0/7c059a94ab5eed3347bf954e27fab58e52968848/asm-util-9.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/9.0/4630afefbb43939c739445dde0af1a5729a0fb4e/asm-analysis-9.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-tree/9.0/9df939f25c556b0c7efe00701d47e77a49837f24/asm-tree-9.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/9.0/af582ff60bc567c42d931500c3fdc20e0141ddf9/asm-9.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/cpw.mods/grossjava9hacks/1.3.3/e49222512ea6cabdd8b49761cef1d5a207b1f0d9/grossjava9hacks-1.3.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.minecraftforge/accesstransformers/3.0.1/6d23c1b9cb0607fddc38d09730796f68db96f546/accesstransformers-3.0.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.antlr/antlr4-runtime/4.9.1/428664f05d2b7f7b7610204b5aa7c1763f62011a/antlr4-runtime-4.9.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.minecraftforge/eventbus/4.0.0/260e34800723e4c098c4e247cf2b900535e01b6d/eventbus-4.0.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.minecraftforge/forgespi/3.2.0/c6ca4e4e4a0343701407c760e642537b613b543/forgespi-3.2.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.minecraftforge/coremods/4.0.6/d6d761379c841e2610abebcbf70ed20b65f728f0/coremods-4.0.6.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.minecraftforge/unsafe/0.2.0/54d7a0a5e8fdb71b973025caa46f341ae5904f39/unsafe-0.2.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.electronwill.night-config/toml/3.6.3/2b05b4d606c517da4d1a7b6d2b97d751c92887d7/toml-3.6.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.electronwill.night-config/core/3.6.3/c601bfeaeb2c0abe7aaa901b0bbe6d1beff49281/core-3.6.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.jline/jline/3.12.1/de2bd909cb9f8eaa741bd03df4a1bd3f6eb593c7/jline-3.12.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.apache.maven/maven-artifact/3.6.3/f8ff8032903882376e8d000c51e3e16d20fc7df7/maven-artifact-3.6.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.jodah/typetools/0.8.3/98f84f353457629e81cc6827224871b1a8faa7af/typetools-0.8.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.minecrell/terminalconsoleappender/1.2.0/96d02cd3b384ff015a8fef4223bcb4ccf1717c95/terminalconsoleappender-1.2.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.11.2/6c2fb3f5b7cd27504726aef1b674b542a0c9cf53/log4j-core-2.11.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.11.2/f5e9a2ffca496057d6891a3de65128efc636e26e/log4j-api-2.11.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.sf.jopt-simple/jopt-simple/5.0.4/4fdac2fbe92dfad86aa6e9301736f6b4342a3f5c/jopt-simple-5.0.4.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.spongepowered/mixin/0.8.2/1cf212283d26f706fd3074318870bebd14d2a9ed/mixin-0.8.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.minecraftforge/nashorn-core-compat/15.1.1.1/1817deb38a5a8811148dca0d23161d92bdbd6184/nashorn-core-compat-15.1.1.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.mojang/patchy/1.2.3/e3107ca512d704a434076a153a6e1149e3787275/patchy-1.2.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/oshi-project/oshi-core/1.1/9ddf7b048a8d701be231c0f4f95fd986198fd2d8/oshi-core-1.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/4.4.0/cb208278274bf12ebdb56c61bd7407e6f774d65a/jna-4.4.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/platform/3.4.0/e3f70017be8100d3d6923f50b3d2ee17714e9c13/platform-3.4.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.ibm.icu/icu4j/66.1/72c7519b6d91f7a1f993bd44a99fe95d67211b27/icu4j-66.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.mojang/javabridge/1.0.22/6aa6453aa99a52a5cd91749da1af6ab70e082ab3/javabridge-1.0.22.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/io.netty/netty-all/4.1.25.Final/d0626cd3108294d1d58c05859add27b4ef21f83b/netty-all-4.1.25.Final.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/21.0/3a3d111be1be1b745edfa7d91678a12d7ed38709/guava-21.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.8.1/6505a72a097d9270f7a9e7bf42c4238283247755/commons-lang3-3.8.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/commons-io/commons-io/2.5/2852e6e05fbb95076fc091f6d1780f1f8fe35e0f/commons-io-2.5.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.3.3/18f4247ff4572a074444572cee34647c43e7c9c7/httpclient-4.3.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.10/4b95f4897fa13f2cd904aee711aeafc0c5295cd8/commons-codec-1.10.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput/2.0.5/39c7796b469a600f72380316f6b1f11db6c2c7c4/jinput-2.0.5.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.java.jutils/jutils/1.0.0/e12fe1fda814bd348c1579329c86943d2cd3c6a6/jutils-1.0.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.mojang/brigadier/1.0.17/c6b7dc51dd44379cc751b7504816006e9be4b1e6/brigadier-1.0.17.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.mojang/datafixerupper/4.0.26/ebd6690f33871ccee9b6132c6480668ee2e35020/datafixerupper-4.0.26.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.8.0/c4ba5371a29ac9b2ad6129b1d39ea38750043eff/gson-2.8.0.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.mojang/authlib/2.1.28/ad54da276bf59983d02d5ed16fc14541354c71fd/authlib-2.1.28.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-compress/1.8.1/a698750c16740fd5b3871425f4cb3bbaa87f529d/commons-compress-1.8.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.1.3/f6f66e966c70a83ffbdb6f17a0919eaf7c8aca7f/commons-logging-1.1.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.3.2/31fbbff1ddbf98f3aa7377c94d33b0447c646b6e/httpcore-4.3.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/it.unimi.dsi/fastutil/8.2.1/5ad88f325e424f8dbc2be5459e21ea5cab3864e9/fastutil-8.2.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.2.2/ee8e57a79300f78294576d87c4a587f8c99402e2/lwjgl-jemalloc-3.2.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.2.2/2b772a102b0a11ee5f2109a5b136f4dc7c630827/lwjgl-openal-3.2.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.2.2/6ac5bb88b44c43ea195a570aab059f63da004cd8/lwjgl-opengl-3.2.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.2.2/d3ad4df38e400b8afba1de63f84338809399df5b/lwjgl-glfw-3.2.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-stb/3.2.2/3b8e6ebc5851dd3d17e37e5cadce2eff2a429f0f/lwjgl-stb-3.2.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-tinyfd/3.2.2/fcbe606c8f8da6f8f9a05e2c540eb1ee8632b0e9/lwjgl-tinyfd-3.2.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.2.2/8ad6294407e15780b43e84929c40e4c5e997972e/lwjgl-3.2.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.mojang/text2speech/1.11.3/f378f889797edd7df8d32272c06ca80a1b6b0f58/text2speech-1.11.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.codehaus.plexus/plexus-utils/3.2.1/13b015768e0d04849d2794e4c47eb02d01a0de32/plexus-utils-3.2.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.jline/jline-reader/3.12.1/4382ab1382c7b6f379377ed5f665dc2f6e1218bc/jline-reader-3.12.1.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.jline/jline-terminal/3.12.1/c777448314e050d980a6b697c140f3bfe9eb7416/jline-terminal-3.12.1.jar:\ /home/tooster/.gradle/caches/forge_gradle/deobf_dependencies/mezz/jei/jei-1.16.5/7.7.0.106_mapped_snapshot_20200920-mixed-1.16.3/jei-1.16.5-7.7.0.106_mapped_snapshot_20200920-mixed-1.16.3.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/cpw.mods/modlauncher/8.0.9/476a62d2a2ebd3573134b8bcd8f0bc21bbdf29ac/modlauncher-8.0.9-api.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.2/25ea2e8b0c338a877313bd4672d3fe056ea78f0d/jsr305-3.0.2.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-jemalloc/3.2.2/268c08a150347e04e44ba56e359d62c9b78669df/lwjgl-jemalloc-3.2.2-natives-linux.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-openal/3.2.2/364f9f5c3947393083ab5f37a571f5603aadd0b/lwjgl-openal-3.2.2-natives-linux.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-opengl/3.2.2/338d33387919cb3f4cdba143c2b738a71ccfda60/lwjgl-opengl-3.2.2-natives-linux.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-glfw/3.2.2/957733f26a6661d4883da0335f7ef46d3bbbd7d/lwjgl-glfw-3.2.2-natives-linux.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-stb/3.2.2/172c52e586fecf43f759bc4f70a778c01f6fdcc1/lwjgl-stb-3.2.2-natives-linux.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl-tinyfd/3.2.2/39e35b161c130635d9c8918ce04e887a30c5b687/lwjgl-tinyfd-3.2.2-natives-linux.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/org.lwjgl/lwjgl/3.2.2/ae7976827ca2a3741f6b9a843a89bacd637af350/lwjgl-3.2.2-natives-linux.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/com.mojang/text2speech/1.11.3/ac641755a2a841d1fca9e660194f42523ee5cfe0/text2speech-1.11.3-natives-linux.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/7ff832a6eb9ab6a767f1ade2b548092d0fa64795/jinput-platform-2.0.5-natives-linux.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/53f9c919f34d2ca9de8c51fc4e1e8282029a9232/jinput-platform-2.0.5-natives-osx.jar:\ /home/tooster/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/385ee093e01f587f30ee1c8a2ee7d408fd732e16/jinput-platform-2.0.5-natives-windows.jar net.minecraftforge.userdev.LaunchTesting -mixin.config=create.mixins.json ``` The most important is the first line - it's running java executable with further arguments. Important thing without which the whole process won't work is setting up environment variables that the task defines. For me it was as seen below (again, for readability split into lines): ## Step 2. environment variables - created by gradle ``` MOD_CLASSES=create%%/home/tooster/workspace/ttr/Create/build/resources/main:create%%/home/tooster/workspace/ttr/Create/build/classes/java/main;\ MCP_MAPPINGS=snapshot_20200920-mixed-1.16.3;\ MCP_VERSION=20210115.111550;\ FORGE_VERSION=36.1.32;\ assetIndex=1.16;\ assetDirectory=/home/tooster/.gradle/caches/forge_gradle/assets;\ nativesDirectory=/home/tooster/workspace/ttr/Create/build/natives;\ FORGE_GROUP=net.minecraftforge;\ target=fmluserdevclient;\ MC_VERSION=1.16.5 ``` ### Where to find those things? The command is by default in the Run window in IntelliJ when you unfold the first line. The envirnonment setup can be found when editing the `runClient` configuration (Environment Variables field). ## Step 3. Remote debugging To make it fully work we also need some way to attach to the process started by renderdoc inside intelliJ if we want to debug (but this will lag like ass, so watch out). For that we create new run configuration from template "Remote JVM Debug". Defaults are OK - we copy generated command line arguments of the task that should look like that: ``` -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 ``` And now to Renderdoc: ## Step 4. ??? ## Step 5. Renderdoc - profit in Launch Application window we set it up as follows: - Executable Path: <first line of command - only the absolute path to java from step 1> - Working Directory: <the run/ directory of our mod project, generated by task> - Command Line Arguments: 1. First, we paste in the content copied from Remote Debugging configuration, but change `suspend=n` to `suspend=y` for renderdoc to wait for debugger to attach. 2. After this is pasted we paste the rest of command copied in step 1 (so everything excluding first line with path to java) - Environment Variables: <this is a little tedious due to the dialog with shitty input method, but we have to set up all variables that we got in step 2 - it's pretty intuitive, but each variable has to be set one by one. I didn't put semicolons at the end> - Capture options - do what you want, I went with defaullt of checked VSync and Fullscreen only. Now you can launch this configuration. When you launch the app via renderdoc it will wait for debugger to attach, so in intelliJ select your created Remote JVM Debug and launch it. This will take time, but now a process runs in a background that launches you MC instance. logs can be viewed under `run/logs/latest.log` in your mod - that's how I in fact recognized that it's launching and not just dead :). ## Sum Up It's ofc easy to extrapolate this info to any other java app. Guide by Tooster aka T3sT3ro.