通过 JNI 加载 JVM 失败时如何收到错误消息?

2024-01-28

我想检索一条错误消息来解释 jvm 加载失败的原因。从此处提供的示例来看:

http://java.sun.com/docs/books/jni/html/invoke.html http://java.sun.com/docs/books/jni/html/invoke.html

我提取了这个例子:

 /* Create the Java VM */
 res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

 if (res < 0) {
     // retrieve verbose error here?
     fprintf(stderr, "Can't create Java VM\n");
     exit(1);
 }

在我的具体情况下,我在 vm_args 中提供了无效参数,并希望看到我在命令行上得到的内容:“无法识别的选项:-foo=bar”

在进一步测试中,看起来 jvm 正在将我想要的消息放入 stdout 或 stderr。我相信我需要捕获 stdout 和 stderr 来获取我正在寻找的错误(当然除非有更简单的方法)。我正在使用 C++ 进行编码,因此如果有人可以展示一种将错误捕获到字符串流中的方法,那就太理想了。

谢谢, 兰迪


我能够通过使用此处描述的“vfprintf”选项来获得我需要的内容:

https://web.archive.org/web/20111229234347/http://java.sun.com/products/jdk/faq/jnifaq-old.html https://web.archive.org/web/20111229234347/http://java.sun.com/products/jdk/faq/jnifaq-old.html

虽然我使用的是jdk1.2选项。此代码片段总结了我的解决方案:

static string jniErrors;

static jint JNICALL my_vfprintf(FILE *fp, const char *format, va_list args)
{
    char buf[1024];
    vsnprintf(buf, sizeof(buf), format, args);
    jniErrors += buf;
    return 0;
}

...

JavaVMOption options[1];
options[0].optionString = "vfprintf";
options[0].extraInfo = my_vfprintf;

JavaVMInitArgs vm_args;
memset(&vm_args, 0, sizeof(vm_args));
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.version = JNI_VERSION_1_4;
vm_args.ignoreUnrecognized = JNI_FALSE;

JNIEnv env;
JavaVM jvm;

jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

if (res != JNI_OK)
    setError(jniErrors);

jniErrors.clear();

同样有趣的是,我一生都无法使用任何 freopen 或 dup2 技巧正确捕获 stdout 或 stderr 。我可以加载我的owndll 并正确重定向,但 jvm 不正确。不管怎样,这种方式更好,因为我想要内存中的错误而不是文件中的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 JNI 加载 JVM 失败时如何收到错误消息? 的相关文章

随机推荐

  • 如何在 Android 上使用 .p12 证书?

    如何在 Android 上使用 p12 证书 我尝试将其添加到Menu Settings Location和安全 当我执行此操作时 证书会从 SD 卡中消失 但是当我访问需要 p12 证书的网站时 我只会收到连接错误 证书 密码和 URL
  • 用平均值替换值

    我有一个数据框如下 Col1 Price 1 Plastic 50 2 Metal 100 3 Plastic 40 我想用 Price 中的值替换 Col1 中的值 所以我得到 Col1 Price 1 45 50 2 100 100 3
  • SwiftUI 中的选取器适用于 ForEach 的一个版本,但不适用于另一个版本 - 错误还是预期行为?

    看哪两个拾取器 第一个 当未注释时 第二个注释 不起作用 当我更改房间时 Text 不会更新 但此处显示的代码 带有第二个选择器 却可以 唯一的区别在于内容封闭 为什么我创建内容的方式会影响绑定 这是错误还是预期行为 struct Cont
  • 模板专业化中的额外方法

    我正在尝试编写一个带有一些方法 运算符等的模板类 现在 当该类是特定类型时 我希望有额外的附加方法 特别适合该类型 而这些方法不适用于任何其他类型 我不想将所有代码复制到新类中 Example template
  • 使用不同单位类型进行测量的最佳方法

    Context 我正在编写一个应用程序 我想在其中显示每个菜单项的营养成分 我希望能够灵活地使用Measurement 类进行转换 Problem 问题是卡路里是在Measurement 中测量的 而蛋白质等其他属性是在Measuremen
  • iOS 中的 UITextView 中未显示笑脸(表情符号)?

    我已将所有 uni codes 表情符号字符 存储在 iphone 支持的 plist 中 当我直接写为 IBAction sendButtonSelected id sender NSMutableArray emoticonsArray
  • Document.NewPage() 不添加新页面

    我正在尝试向 pdf 文档添加新页面 但由于某种原因 这种情况没有发生 也许我的另一个问题https stackoverflow com questions 11428878 itextsharp splitlate not working
  • PWA - 清单属性“display”:“standalone”在 Android 上不起作用

    我注意到我的 PWA 的行为非常奇怪 我可以在 Windows 上以 独立 模式启动它 但是当我尝试在 Android 设备上执行相同操作时 它会忽略 独立 值并在 Chrome 中打开网址 Android 7 0 Chrome Andro
  • 在java 8中将日期转换为EST

    我正在尝试将日期转换为以下时区 但结果不符合预期 我得到的要求是例如从PMST to EST输出应该少2小时 PMST 新标准时间 谷草转氨酶 美东时间 国家标准时间 MST 太平洋标准时间 农业科学技术 哈斯特 String inputD
  • 如何在单个选项卡中显示新片段?

    我正在创建三个选项卡 每个选项卡包含一个片段 现在我想用同一选项卡中的新片段替换第一个选项卡的片段 如何在选项卡保持不变的情况下做到这一点 我的代码 Tab Widget java public class Tab Widget exten
  • R可以用于GIS吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想创建一些 GIS 绘图 我想知道 R 是否可以用于此目的 以下是一些与我想要制作的概念相似的绘图示例 美国的温度图 或等高线图 颜
  • NHibernate,如何将属性映射到子选择

    我目前有一个遗留系统 专门使用 SP 来访问数据库 我的域对象看起来像这样 public class User EntityBase public virtual string Name get set public virtual str
  • 如何向 JFrame 添加文本?

    所以我正在使用 Eclipse WindowBuilder 设计 JFrame 此特定帧是一条错误消息 指出用户提供了无效的凭据 我添加了一个退出框架的按钮 现在需要显示实际的错误消息 指定的登录凭据无效 请提供有效的凭据 我做了一些搜索
  • 如何使用 EMBER.SORTABLEMIXIN?

    My FIXTURES包含我想根据 ID 排序的产品数组 Astcart Application FIXTURES name astr home products id 3 name Mobiles Accessories id 2 nam
  • 如何使用 jQuery 禁用浏览器中的工具提示?

    有没有办法在将鼠标悬停在填充了 标题 属性的元素上时禁用浏览器工具提示的显示 请注意 我不想删除标题内容 这是请求的代码 document ready function a clickableSticky cluetip splitTitl
  • 如何向 Android 应用程序添加项目符号列表?

    如何将项目符号列表添加到我的文本视图 很难做到 因为不支持 ul li ol 幸运的是 您可以使用它作为语法糖 8226 foo br 8226 bar br 8226 baz br 8226 是列表项目符号的 html 实体 更多选择在这
  • OAuth 2.0 教程? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在 Twisted 上编写 REST Web 服务 并且我想使用 OAuth2 0用于授权 是否有教
  • 基于多个 ScrollView 对单个 View 进行动画处理

    我正在开发一个应用程序 我试图在其中制作动画View基于多个滚动位置ScrollViews 这就是屏 幕的样子 上面的屏幕有 2 个部分 A View组件在顶部 A TabNavigator底部组件 中的每个选项卡TabNavigator
  • jQuery 同时缩放和淡入淡出

    所以我可以让一个 div 从它的中心枢轴很好地缩放 http jsfiddle net uTDay http jsfiddle net uTDay 但是 当我在 div 内添加内容时 过渡开始发生变化 http jsfiddle net u
  • 通过 JNI 加载 JVM 失败时如何收到错误消息?

    我想检索一条错误消息来解释 jvm 加载失败的原因 从此处提供的示例来看 http java sun com docs books jni html invoke html http java sun com docs books jni