Oracle Pro * C 12.1 - стандартное содержимое вывода не перенаправляется в файл при создании дампа ядра - PullRequest
0 голосов
/ 04 декабря 2018

Я сталкиваюсь с довольно странной проблемой прекомпилятора Oracle Pro * C в linux: в рамках нашего процесса сборки мы вызываем утилиту proc для генерации файлов .cxx, которые впоследствии компилируются как исходные файлы C ++.Эта утилита proc вызывается через скрипт python, который захватывает как stdout, так и stderr и печатает их оба в случае кода возврата, отличного от 0.Всякий раз, когда прекомпилятор сталкивается с ошибкой компиляции, он сообщает о них в стандартном выводе, который правильно распечатывается и возвращает код возврата, отличный от 0.

Однако в нашей среде CI прекомпилятор систематически завершает работу, возвращая отрицательный код возврата, сничего не выводится ни на стандартный вывод, ни на стандартную ошибку.

Моя конечная цель - понять этот сбой и исправить его, но я не могу воспроизвести этот конкретный сбой за пределами среды CI.Однако мне удалось создать другой сбой утилиты proc на виртуальной машине Linux, передав ложные папки include в качестве аргументов.И я являюсь свидетелем странного поведения в моем bash-терминале, которое объясняет, хотя я вообще не получаю вывод из своего скрипта на python.При непосредственном вызове proc в моем терминале правильно выводится сообщение об ошибке:

$> /path/to/proc option_1=foo option2=bar

Pro*C/C++: Release 12.1.0.2.0 - Production on Tue Dec 4 08:13:31 2018

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

System default option values taken from: /usr/lib/oracle/12.1/client64/lib/precomp/admin/pcscfg.cfg

Error at line 3, column 10 in file /usr/include/c++/8/x86_64-redhat-linux/bits/c++config.h
#include <bits/wordsize.h>
.........1
PCC-S-02015, unable to open include file
Error at line 39, column 10 in file /usr/include/c++/8/x86_64-redhat-linux/bits/os_defines.h
#include <features.h>
.........1
PCC-S-02015, unable to open include file
Syntax error at line 44, column 21, file /usr/include/c++/8/x86_64-redhat-linux/bits/os_defines.h:
Error at line 44, column 21 in file /usr/include/c++/8/x86_64-redhat-linux/bits/os_defines.h
#if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE)
....................1
PCC-S-02201, Encountered the symbol "," when expecting one of the following:

)

Syntax error at line -1741187720, column 0, file p�:

INTERNAL ERROR: Failed assertion [PGE Code=90105]

Segmentation fault (core dumped)
$>

При перенаправлении стандартного вывода в файл сообщение об ошибке не выводится, кроме последней строки, касающейся генерируемого ядра.,Однако файл, содержащий перенаправленный вывод, пуст:

$> /path/to/proc option_1=foo option2=bar > test.txt
Segmentation fault (core dumped)
$> more test.txt
$> ls -al test.txt
-rw-r--r--  1 me  staff  0  3 déc 20:27 test.txt
$>

Кроме того, вывод трубопровода в cat не приводит к печати вообще:

$> /path/to/proc option_1=foo option2=bar | cat
$> 

На основании этого Iесть 2 вопроса:

  • как возможно, что вывод не попадает в файл при перенаправлении?
  • как еще я могу попытаться захватить его?
...