Как сохранить вывод консоли Qt в текстовый файл из командной строки в Ubuntu

#c #qt #ubuntu

#c #qt #ubuntu

Вопрос:

Я написал приложение Qt, которое работает в фоновом режиме Ubuntu как демон. Это приложение выходит из строя через случайное время, я хочу посмотреть, какую ошибку оно выдает при сбое.

Я написал этот синтаксис, чтобы посмотреть, смогу ли я получить его вывод в виде текста:

 dimit@dimit-FX620DX:~$ ./Myapp amp;> DebugInfo.txt
  

но он ничего не записывает в текстовый файл. Я написал эту простую программу для имитации более крупного проекта

Mainwindow.cpp

 #include "mainwindow.h"
#include "ui_mainwindow.h"
#include <stdio.h>
#include <iostream>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    std::vector<int> Test;
    Test[-1] = 90;  //in here it gives segmentation fault error and exits the program
}

MainWindow::~MainWindow()
{
    delete ui;
}
  

вот вывод терминала при запуске этого кода:

 dimit@dimit-FX620DX:~/QtProjects/Test/Test-build-desktop-Qt_4_8_1__System__Debug$ ./Myapp  amp;> DebugInfo.txt
Aborted (core dumped)
  

Я ожидал увидеть «Прервано (сброшено ядро)» в DebugInfo.txt файл, но в нем ничего не было написано. Что мне делать?

Я использую Qt 4.8 под Ubuntu 12.04

Комментарии:

1. Вы хотите переслать стандартную ошибку вашего процесса в файл, а не стандартный вывод . Это означает 2> , что вместо >

2. да, но ввод amp; перед> означает как стандартный вывод, так и стандартную ошибку.

3. Удалите пробелы между amp;> и DebugInfo.txt и я бы использовал его именно в таком порядке>amp;

4. @Dimitry Хм, интересно, этого не знал. Я думал, вы хотите выполнить его как задание и перенаправить вывод в файл.

5. @Maciej это ничего не изменило… Я думаю, что bash обрабатывает пробелы.

Ответ №1:

Текст «Прервано (сброшено ядро)» не печатается вашей программой, он печатается оболочкой после завершения работы программы. Итак, решение простое, запустите программу в другой оболочке и перенаправьте ее вывод:

 sh -c ./Myapp amp;> DebugInfo.txt
  

( -c Это заставляет оболочку выполнять команду как командную строку и необходимо, потому что без этого sh она попытается запустить ./Myapp как сценарий оболочки и завершится неудачей.)

Комментарии:

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