JNI环境下用GDB调试C++代码(31)

  1. 前言
    HelloWorld
    2. 环境

  • 3. WSL Ubuntu 安装 java 环境
  1. 生成完整的 JNI 工程代码
    1、IDEA 编写 JNIHelloWorldjava 端代码。以下示例的代码路径为:/mnt/e/云文件/Repository/JNI/src
    JNI环境下用GDB调试C  代码(31) - 图1
    JNI.zip
    JNI环境下用GDB调试C  代码(31) - 图2
    HelloWorld.h
    HelloWorld.h
    JNI环境下用GDB调试C  代码(31) - 图3
    HelloWorld.class
    HelloWorld.classjavac HelloWorld.java
    JNI环境下用GDB调试C  代码(31) - 图4
    注意:HelloWorld.h HelloWorld.class HelloWorld.hError: Could not find class file for ‘HelloWorld’.JNI环境下用GDB调试C  代码(31) - 图5

/mnt/e/云文件/Repository/JNI/src HelloWorld.cpp

HelloWorld.cpp
部分参数说明:

  • -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux/ -I/usr/lib/jvm/java-11-openjdk-amd64/include/HelloWorld.cppJNI环境下用GDB调试C  代码(31) - 图6
    JNI环境下用GDB调试C  代码(31) - 图7

JNI环境下用GDB调试C  代码(31) - 图8
5. JNI 环境下用 GDB 调试 C++ 代码
JNI环境下用GDB调试C  代码(31) - 图9
注意:

  • Step 8 这里第一次用n 进入到 C++ GDB 调试环境,如果提示“没有行数信息”等错误,那么第一次改为用c 进入到 C++ GDB 调试环境
  • jdb 进入 java 调试环境 > 设置 java 断点 > gdb attach 到 java 进程 > 设置 C++ 断点 > 继续运行 java > 进入 C++ GDB 调试环境在调用 JNI 函数之前,设置一个等待键盘输入的语句 > gdb attach 到 java 进程 > 设置 C++ 断点 > java 获取键盘输入,运行 JNI 函数 > 进入 C++ GDB 调试环境
    图片步骤总结:

注意:但是不包含源码如果移动了动态库或者源码的位置list gdb调试解决找不到源代码的问题
注意:Java_HelloWorld_printHelloWorld.cpp