#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. Теперь я могу понять, почему пользователи с высокой репутацией имеют больше возможностей для решения проблем, чем другие 😉