小编use*_*967的帖子

Surefire Maven插件:“通过直接在派生的JVM中写入本机流而损坏了STDOUT”

通过Maven和Surefire插件运行它们时,我的JUnit测试失败(下面的版本信息)。我看到错误消息:

Corrupted STDOUT by directly writing to native stream in forked JVM 4. See FAQ web page and the dump file C:\(...)\target\surefire-reports\2019-03-20T18-57-17_082-jvmRun4.dumpstream
Run Code Online (Sandbox Code Playgroud)

FAQ页面指出了一些可能的原因,但我看不到如何使用此信息来开始解决此问题:

通过直接在派生的JVM中写入本机流而损坏了STDOUT

如果您的测试使用打印到STDOUT的本机库,则会出现此警告消息,因为该库损坏了插件使用的通道,以便将具有测试状态的事件传输回Maven进程。如果通过System.setOut覆盖Java流,则情况甚至更糟,因为该流也应该被破坏,但是Maven将永远看不到测试完成并且构建可能会挂起。

如果使用FileDescriptor.out或JVM打印GC摘要,则会出现此警告消息。

在这种情况下,将显示警告“通过直接写入派生JVM中的本机流而损坏STDOUT”,并且可以在Reports目录中找到转储文件。

如果启用了调试级别,则控制台中将显示流损坏的消息。

它指的是直接将某些本机库打印到STDOUT,但是如果我需要为项目提供库,如何确定哪一个库,即使这样做,也应如何处理?

它提到了“调试级别”,但尚不清楚这是否意味着Maven的调试级别或Surefire插件的调试级别。我启用了Maven的调试功能,但没有看到FAQ中提到的控制台输出。Surefire的调试选项似乎与暂停测试并等待调试器连接到进程有关,而不仅仅是在控制台上显示更多信息。

转储文件似乎也不太有用:

# Created on 2019-03-20T18:42:58.323
Corrupted STDOUT by directly writing to native stream in forked JVM 2. Stream 'FATAL ERROR in native method: processing of -javaagent failed'.
java.lang.IllegalArgumentException: Stream stdin corrupted. Expected comma after third character in command 'FATAL ERROR in native method: processing of -javaagent failed'.
    at org.apache.maven.plugin.surefire.booterclient.output.ForkClient$OperationalData.<init>(ForkClient.java:511)
    at …
Run Code Online (Sandbox Code Playgroud)

java junit maven maven-surefire-plugin

14
推荐指数
5
解决办法
5861
查看次数

什么是导致堆污染的Java代码的一个明显正确的例子?

我正在尝试决定在每次使用参数化的varargs(例如in)时遇到Java堆污染警告时该怎么做

public static <T> LinkedList<T> list(T... elements) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

在我看来,如果我有信心不在我的方法中使用一些奇怪的演员,我应该@SafeVarargs继续使用并继续前进.但这是正确的,还是我需要更加小心?使用参数化varargs时,是否有明显正确的代码实际上不安全?

阅读有关该主题的内容,我注意到提供的示例非常人为.例如,Java文档显示以下错误方法:

public static void faultyMethod(List<String>... l) {
    Object[] objectArray = l;     // Valid
    objectArray[0] = Arrays.asList(42);
    String s = l[0].get(0);       // ClassCastException thrown here
}
Run Code Online (Sandbox Code Playgroud)

这是教诲但非常不现实; 有经验的程序员不太可能编写代码来做这样的事情.另一个例子

Pair<String, String>[] method(Pair<String, String>... lists) { 
   Object[] objs = lists; 
   objs[0] = new Pair<String, String>("x", "y");  
   objs[1] = new Pair<Long, Long>(0L, 0L);  // corruption !!! 
   return lists; 
} 
Run Code Online (Sandbox Code Playgroud)

这显然是以一种不切实际的方式混合类型.

那么,在参数化的变量下,堆污染会发生更微妙的情况吗?@SafeVarargs如果我没有以丢失输入信息的方式转换变量,或者错误地混合类型,我是否有理由使用?换句话说,我是否有理由将这一警告视为一种不太重要的形式?

java variadic-functions heap-pollution

13
推荐指数
2
解决办法
382
查看次数

Docker错误:无法启动服务...:找不到网络7808732465bd529e6f20e4071115218b2826f198f8cb10c3899de527c3b637e6

启动docker容器(不是我开发的)时,docker表示未找到网络。

这是否意味着问题出在容器本身之内(因此只有开发人员才能解决),还是可以更改某些网络配置来解决此问题?

networking docker

13
推荐指数
7
解决办法
4436
查看次数

我们如何将 Python 上下文管理器与其块中出现的变量“关联”?

据我了解,Python 中使用上下文管理器来定义对象的初始化和完成代码段 (__enter__和)。__exit__

然而,在PyMC3 教程中,他们展示了以下上下文管理器示例:

basic_model = pm.Model()

with basic_model:

    # Priors for unknown model parameters
    alpha = pm.Normal('alpha', mu=0, sd=10)
    beta = pm.Normal('beta', mu=0, sd=10, shape=2)
    sigma = pm.HalfNormal('sigma', sd=1)

    # Expected value of outcome
    mu = alpha + beta[0]*X1 + beta[1]*X2

    # Likelihood (sampling distribution) of observations
    Y_obs = pm.Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
Run Code Online (Sandbox Code Playgroud)

并提到这的目的是将变量alphabetasigmamuY_obs模型 basic_model 相关联。

我想了解这样的机制是如何运作的。在我发现的上下文管理器解释 中,我没有看到任何建议上下文块中定义的变量或对象如何以某种方式“关联”到上下文管理器。库(PyMC3)似乎可以以某种方式访问​​“当前”上下文管理器,因此它可以在幕后将每个新创建的语句与其关联。但是库如何访问上下文管理器呢?

python contextmanager pymc3

11
推荐指数
1
解决办法
3393
查看次数

PyTorch 的 torch.autograd.grad 中 grad_outputs 的含义

我无法理解grad_outputs中选项的概念含义torch.autograd.grad

\n

文档说:

\n
\n

grad_outputs应该是一个长度匹配输出的序列,其中包含雅可比向量积中的 \xe2\x80\x9cvector\xe2\x80\x9d ,通常是每个输出的预先计算的梯度。如果输出不\xe2\x80\x99t require_grad,则梯度可以是None)。

\n
\n

我发现这个描述相当神秘。雅可比向量积到底是什么意思?我知道雅可比行列式是什么,但不确定它们在这里意味着什么元素方式、矩阵乘积,还是其他什么?我无法从下面的例子中看出。

\n

为什么“向量”要加引号?事实上,在下面的示例中,当 是向量时我会收到错误grad_outputs,但当它是矩阵时则不会。

\n
>>> x = torch.tensor([1.,2.,3.,4.], requires_grad=True)\n>>> y = torch.outer(x, x)\n
Run Code Online (Sandbox Code Playgroud)\n

为什么我们会观察到以下输出;它是如何计算的?

\n
>>> y\ntensor([[ 1.,  2.,  3.,  4.],\n        [ 2.,  4.,  6.,  8.],\n        [ 3.,  6.,  9., 12.],\n        [ 4.,  8., 12., 16.]], grad_fn=<MulBackward0>)\n\n>>> torch.autograd.grad(y, x, grad_outputs=torch.ones_like(y))\n(tensor([20., 20., 20., 20.]),)\n
Run Code Online (Sandbox Code Playgroud)\n

然而,为什么会出现这个错误呢?

\n
>>> torch.autograd.grad(y, x, grad_outputs=torch.ones_like(x))  \n …
Run Code Online (Sandbox Code Playgroud)

pytorch autograd

8
推荐指数
1
解决办法
6374
查看次数

无法在 C++ 项目中使用 CXX 链接 Rust 编写的库

我正在使用一个非常简单的项目来测试CXX,将 Rust 库链接到 C++ 可执行文件中。

我编写了一个foo() -> ()Rust 函数并尝试从 C++ 访问它,但链接器找不到它。

这是我所拥有的:

// lib.rs

#[cxx::bridge]
mod ffi {
    extern "Rust" {
        pub fn foo() -> ();
    }
}

pub fn foo() -> () {
    println!("foo")
}
Run Code Online (Sandbox Code Playgroud)
# Cargo.toml
[package]
name = "cpprust"
version = "0.1.0"
edition = "2021"

[lib]
name = "cpprust"
path = "src/lib.rs"
crate-type = ["staticlib", "rlib", "dylib"] # EDIT: this is incorrect, see note at the end of question

# See more keys …
Run Code Online (Sandbox Code Playgroud)

c++ binding rust

8
推荐指数
1
解决办法
3077
查看次数

IntelliJ IDEA“自动构建项目”显然不起作用

我是 Java Eclipse 的长期用户,并且习惯于在我引起编译错误和警告时立即在“问题”视图中看到这些错误和警告。

现在我正在使用 IntelliJ IDEA(Kotlin 和 Java)。有一个“问题”视图,但即使代码窗口边缘显示错误或警告,它也通常保持为空。

如果我按 Ctrl-F9 进行“构建项目”,则错误会在“问题”中列出,但我希望这种情况自动发生。

我选择了“设置”->“构建、执行、部署”->“编译器”->“自动构建项目”,但这似乎没有什么区别。

StackOverflow 显示Intellij IDEA Java 类在保存时不会自动编译作为可能的相关问题,但所选答案对我不起作用。除了很旧之外,该答案还说“自动构建项目”仅在“如果您使用外部编译器选项”时才有效,但我不知道那是什么(在 IntelliJ 文档上搜索“外部编译器”不会返回任何相关的内容)而我的设置没有提及它。答案并没有说明如果您不使用此类选项该怎么办。

那么,当我在 IntelliJ IDEA 中修改代码时,如何才能看到自动列出的错误和警告呢?

build intellij-idea

7
推荐指数
1
解决办法
8895
查看次数

为什么此示例程序中的OpenJDK 11 Java垃圾收集器“减少”了可用内存?

当我使用OpenJDK 11(在Windows 10上为Zulu发行版)编译并运行以下非常简单的Java程序时:

public class GCTest {
    public static void main(String[] args) {
        System.out.println("Free memory before garbage collection: " + Runtime.getRuntime().freeMemory());
        Runtime.getRuntime().gc();
        System.out.println("Free memory  after garbage collection: " + Runtime.getRuntime().freeMemory());
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来垃圾回收正在减少可用内存量:

Free memory before garbage collection: 266881496
Free memory  after garbage collection: 7772200
Run Code Online (Sandbox Code Playgroud)

当我使用Oracle Java 8运行它时,不会发生这种情况:

Free memory before garbage collection: 254741016
Free memory  after garbage collection: 255795064
Run Code Online (Sandbox Code Playgroud)

这是为什么?

java garbage-collection azul-zulu java-11

7
推荐指数
1
解决办法
943
查看次数

如何在命题逻辑中获得"间接含义"

我试图解决命题逻辑中的一个问题,我认为这在任何地方都没有见过.我在这里发帖,看看是否有人有一个希望的标准解决方案.

问题:给定一个命题满足的逻辑式F和命题p中发生F,确定是否有令人满意的命题公式phi不包含 p使得

phi => (F => p)
Run Code Online (Sandbox Code Playgroud)

如果是的话,提供这样的phi.

对于直觉,我会称之为phi"p wrt F的间接含义",因为它需要暗示p而不提p.相反,它提到了影响p through的其他命题F.

这是一个例子,"法国","里昂","巴黎"和"柏林"都是命题:

F is "paris => france and lyon => france and berlin => not france"

p is "france"
Run Code Online (Sandbox Code Playgroud)

然后解决方案是paris or lyon,因为这意味着(F => france)

(更新:其实准确的解决方案是(paris or lyon) and not berlin因为我们没有在任何地方指出这些主张是相互排斥的,所以parisberlin(或lyonberlin)可以都在同一时间真正和暗示的矛盾在本适当的背景知识的解决办法.简化为paris or lyon).

它类似于找到公式的含义的问题(F => p),但它不同,因为一个简单的蕴涵者可以包含p …

algorithm logic boolean-logic

6
推荐指数
1
解决办法
116
查看次数

我在 Windows 10 中安装了 GPU 和 CUDA,但 Pytorch 的 torch.cuda.is_avaiable() 返回 false;我该如何纠正?

我在装有 Nvidia GTX 1050 GPU 的 Windows 10 机器上安装了 PyTorch。我已经安装了 CUDA Toolkit 并使用Nvidia 说明对其进行了测试,并且进展顺利,包括执行建议的测试。

但是,torch.cuda.is_available()返回False. 我怎样才能解决这个问题?

windows pytorch

5
推荐指数
3
解决办法
6469
查看次数