如何抑制错误信息:"Error in `./hubbard.exc': corrupted size vs. prev_size"?

How to suppress the error message: "Error in `./hubbard.exc': corrupted size vs. prev_size"?

我有一个用 C++ 编写的非常古老的程序(从 80 年代末开始),我以某种方式设法在 运行ning Ubuntu 16.04 64Bit 上获得了它。即使最后产生错误,结果也没有问题。由于现在似乎无法编译该程序(它使用了一个非常旧版本的专有库 NAG),我无法修复源代码中的问题并且不得不忍受错误。我需要 运行 这个程序在一个循环中并且错误消息完全弄乱了我的屏幕并阻止我看到相关消息。我试图通过使用 ./hubbard.exc 2>/dev/null 之类的调用及其变体 &>/dev/null 来抑制消息,但错误消息仍打印到屏幕上。所以我得出结论,这个错误消息既没有打印到 stdout 也没有打印到 stderr.

如果您能帮助我抑制此错误消息,或就如何抑制 shell!

的所有输出提供建议,我将不胜感激

如果无法在 shell 中抑制此错误消息,它还可以帮助我找到一种从 Python3 脚本中 运行 程序的方法(使用 subprocessos.system)否则错误会打印到屏幕上。

我所说的错误消息如下所示:

*** Error in `./hubbard.exc': corrupted size vs. prev_size: 0x0a350a98 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x67377)[0xf7d5e377]
/lib/i386-linux-gnu/libc.so.6(+0x6d2f7)[0xf7d642f7]
/lib/i386-linux-gnu/libc.so.6(+0x6e48a)[0xf7d6548a]
./libstdc++-libc6.2-2.so.3(__builtin_vec_delete+0x24)[0xf7f5ea44]
./hubbard.exc[0x80b4ad4]
./hubbard.exc[0x808e141]
./hubbard.exc[0x805352d]
./hubbard.exc[0x805257f]
./hubbard.exc[0x80527c5]
./hubbard.exc(fwrite+0xc7)[0x8049623]
./hubbard.exc[0x80b7779]
/lib/ld-linux.so.2(+0xfa87)[0xf7f89a87]
/lib/i386-linux-gnu/libc.so.6(+0x2e993)[0xf7d25993]
======= Memory map: ========
08048000-080bd000 r-xp 00000000 08:16 15208152                           /mnt/data/Downloads/Ausfuehrbar/hubbard.exc
080bd000-080cb000 rwxp 00074000 08:16 15208152                           /mnt/data/Downloads/Ausfuehrbar/hubbard.exc
080cb000-080cf000 rwxp 00000000 00:00 0 
098ee000-0a51e000 rwxp 00000000 00:00 0                                  [heap]
f7b00000-f7b21000 rwxp 00000000 00:00 0 
f7b21000-f7c00000 ---p 00000000 00:00 0 
f7cf6000-f7cf7000 rwxp 00000000 00:00 0 
f7cf7000-f7ea7000 r-xp 00000000 08:02 917535                             /lib/i386-linux-gnu/libc-2.23.so
f7ea7000-f7ea9000 r-xp 001af000 08:02 917535                             /lib/i386-linux-gnu/libc-2.23.so
f7ea9000-f7eaa000 rwxp 001b1000 08:02 917535                             /lib/i386-linux-gnu/libc-2.23.so
f7eaa000-f7ead000 rwxp 00000000 00:00 0 
f7ead000-f7f00000 r-xp 00000000 08:02 917512                             /lib/i386-linux-gnu/libm-2.23.so
f7f00000-f7f01000 r-xp 00052000 08:02 917512                             /lib/i386-linux-gnu/libm-2.23.so
f7f01000-f7f02000 rwxp 00053000 08:02 917512                             /lib/i386-linux-gnu/libm-2.23.so
f7f0d000-f7f29000 r-xp 00000000 08:02 917507                             /lib/i386-linux-gnu/libgcc_s.so.1
f7f29000-f7f2a000 rwxp 0001b000 08:02 917507                             /lib/i386-linux-gnu/libgcc_s.so.1
f7f2a000-f7f2b000 rwxp 00000000 00:00 0 
f7f2b000-f7f61000 r-xp 00000000 08:16 15208227                           /mnt/data/Downloads/Ausfuehrbar/libstdc++-libc6.2-2.so.3
f7f61000-f7f72000 rwxp 00036000 08:16 15208227                           /mnt/data/Downloads/Ausfuehrbar/libstdc++-libc6.2-2.so.3
f7f72000-f7f75000 rwxp 00000000 00:00 0 
f7f75000-f7f78000 r--p 00000000 00:00 0                                  [vvar]
f7f78000-f7f7a000 r-xp 00000000 00:00 0                                  [vdso]
f7f7a000-f7f9d000 r-xp 00000000 08:02 917518                             /lib/i386-linux-gnu/ld-2.23.so
f7f9d000-f7f9e000 r-xp 00022000 08:02 917518                             /lib/i386-linux-gnu/ld-2.23.so
f7f9e000-f7f9f000 rwxp 00023000 08:02 917518                             /lib/i386-linux-gnu/ld-2.23.so
ff8f5000-ff916000 rwxp 00000000 00:00 0                                  [stack]

我不是专家,但我相信这个旧软件不能很好地适应 'new' Ubuntu。我相信您应该要么找到一个与导致错误的错误具有相同功能的更令人反感的程序,要么只找到该程序的新版本。

您可以使用 export LIBC_FATAL_STDERR_=1 让这个回溯进入 stderr,然后使用 2>/dev/null 删除错误信息,比如

$ LIBC_FATAL_STDERR_=1 ./hubbard.exc 2>/dev/null 

,请参阅 glibc backtrace - can't redirect output to file 了解更多详情。