Ошибка отладки Qt: при анализе списка целевых библиотек: неправильно сформирован (недопустимый токен)

Я отлаживаю приложение, разработанное в Qt/C++, используя QtCreator. Мое приложение читает из последовательного порта с помощью QextSerialPort, где последовательный порт подключен к контроллеру Rhino Mark IV.

int  bytesRead;
char buffer[BUFFER_SIZE];
if (_serialPort->bytesAvailable() > 0
    && (bytesRead = _serialPort->read(buffer, BUFFER_SIZE)) > 0)
{
    _comBuffer.append(buffer, bytesRead);
    buffer[bytesRead+1] = 0; // for debugging purposes
    qDebug(buffer);          // for debugging purposes
}

У меня проблемы с этим, потому что я пытаюсь прочитать некоторые данные ASCII, но в буфер попадаю какие-то странные символы. Например, код ASCII для числа ноль ("0") заменяется другим кодом, который отображается отладчиком и печатается с помощью qDebug как "°".

Кроме того, я получаю следующее сообщение на вкладке «Вывод приложения»: while parsing target library list: not well-formed (invalid token).

Интересно, почему я не получаю соответствующий код ASCII с QextSerialPort. Это проблема QextSerialPort или контроллера Rhino Mark IV? Я просматриваю трафик через последовательный порт на двух мониторах, и символы ASCII отображаются на мониторах правильно. Таким образом, я сделал вывод, что проблема не в контроллере или канале связи.

Что означает сообщение while parsing target library list: not well-formed (invalid token) и чем оно вызвано?


person Genba    schedule 25.03.2011    source источник


Ответы (1)


Правильно ли вы настроили последовательный порт в своем приложении (например, скорость передачи, стоповые биты и т. д.)?

Кроме того, вы не должны добавлять 1 к bytesRead, когда нуль завершает буфер, поскольку это допускает один нежелательный байт в конце строки.

Это сообщение об ошибке генерируется gdb, а не Qt. Это может быть связано с использованием файлов/папок с именами, не закодированными в латинице1.

person Judge Maygarden    schedule 25.03.2011
comment
Я добавил это 1 к bytesRead в целях отладки, просто для простой печати строки, хранящейся в буфере, учитывая, что я знаю, что у меня никогда не будет переполнения во время моих тестов (поскольку я выполняю тесты и я знаю, что буфер никогда не будет заполняется во время этих испытаний). Я установил правильную скорость передачи данных, но я не уверен, правильно ли установлены другие параметры. Тем не менее, я могу читать и писать из порта (на самом деле, отправка команд через последовательное соединение работает отлично), но проблема в том, что байты, которые я считываю из порта, не имеют правильной кодировки символов. - person Genba; 26.03.2011
comment
Наконец, я понял, что то, как я настраивал последовательный порт, было совершенно неправильным. Некоторые настройки были правильными, но не все. Я не нашел эту информацию в руководстве к устройству, но в руководстве, отличном от руководства к соответствующему устройству, что очень раздражало. - person Genba; 13.04.2011