LINUX.ORG.RU

qt прога падает при подключении по rdp

 , ,


0

1

На компе запущена qt прога, которую просто запускают, она ничего не делает, просто окно открыто. Когда по rdp подключаются то иногда падает. Что тут может быть, где искать багу. И вообще это прога или чет с осью ?

Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит.

А если серьезно, то, либо в дебагерре ловить, либо вдумчиво вкуривать исходники на предмет экзотических сношений с Х-сервером. Это если дело в проге. Еще можно попробовать поиграть с версиями Qt, если оно динамически прилинковано.

cocucka ★★★★ ()
Ответ на: комментарий от Zhbert

Не падает отладочный вариант. Релизный падает после GetKeyBoardState функции какой-то. Смотрел по стеку трейсу ассемблерному. Куда копать ? В проге есть виджет, который рисуем. Пробовать отрубить его сначала ?

user2132 ()
Ответ на: комментарий от EXL

Вот из дизассемблера 3 функции, в которых он был при падении.

Из translateKeyEvent в updateKeyMap потом в updatePossibleKeyCodes и внутри этой уже падение было.

bool thiscall QWindowsKeyMapper::translateKeyEvent(QWindowsKeyMapper *this, QWindow *widget, HWND *hwnd, tagMSG *msg, int *result) { bool v5; // al@2 QWindowsKeyMapper *thisa; // [sp+0h] [bp-20h]@1 tagMSG peekedMsg; // [sp+4h] [bp-1Ch]@3

thisa = this; *result = 0; if ( msg->message == 81 ) { QWindowsKeyMapper::deleteLayouts(this); v5 = 1; } else { QWindowsKeyMapper::updateKeyMap(this, msg); //в этой падает if ( PeekMessageW(&peekedMsg, hwnd, 0, 0, 0) && peekedMsg.message == 259 ) v5 = 1; else v5 = QWindowsKeyMapper::translateKeyEventInternal(thisa, widget, msg, 0); } return v5; }

void __thiscall QWindowsKeyMapper::updateKeyMap(QWindowsKeyMapper *this, tagMSG *msg) { QWindowsKeyMapper *v2; // ST0C_4@1 char kbdBuffer[256]; // [sp+8h] [bp-108h]@1

v2 = this; GetKeyboardState(kbdBuffer); QWindowsKeyMapper::updatePossibleKeyCodes(v2, kbdBuffer, (msg->lParam >> 16) & 0x1FF, msg->wParam); //в этой падает }

void __thiscall QWindowsKeyMapper::updatePossibleKeyCodes(QWindowsKeyMapper *this, char *kbdBuffer, unsigned int scancode, unsigned int vk_key) { QMessageLogger *v4; // eax@14 unsigned int v5; // ST18_4@22 unsigned int v6; // ST14_4@22 unsigned int v7; // ST10_4@22 QMessageLogger *v8; // eax@22 signed int v9; // [sp+0h] [bp-248h]@20 const char *v10; // [sp+4h] [bp-244h]@17 QWindowsKeyMapper *thisa; // [sp+8h] [bp-240h]@1 QMessageLogger v12; // [sp+Ch] [bp-23Ch]@22 QMessageLogger v13; // [sp+20h] [bp-228h]@14 unsigned int i; // [sp+34h] [bp-214h]@14 char emptyBuffer[256]; // [sp+38h] [bp-210h]@12 char buffer[256]; // [sp+138h] [bp-110h]@5 bool isDeadKey; // [sp+243h] [bp-5h]@5 int fallbackKey; // [sp+244h] [bp-4h]@5

thisa = this; if ( vk_key && (!((*(_DWORD *)&this->keyLayout[vk_key] >> 1) & 1) || *(_DWORD *)&this->keyLayout[vk_key] & 1) ) { memcpy(buffer, kbdBuffer, 0x100u); buffer[91] = 0; buffer[92] = 0; buffer[20] = 0; buffer[144] = 0; buffer[145] = 0; buffer[161] = 0; buffer[163] = 0; buffer[164] = 0; isDeadKey = 0; thisa->keyLayout[vk_key].deadkeys = 0; //где-то тут падает из-за попытки писать в память readonly *(_DWORD *)&thisa->keyLayout[vk_key] &= 0xFFFFFFFE; *(_DWORD *)&thisa->keyLayout[vk_key] |= 2u; setKbdState(buffer, 0, 0, 0); thisa->keyLayout[vk_key].qtKey[0] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); thisa->keyLayout[vk_key].deadkeys |= isDeadKey != 0; setKbdState(buffer, 1, 0, 0); thisa->keyLayout[vk_key].qtKey[1] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); thisa->keyLayout[vk_key].deadkeys |= isDeadKey != 0 ? 2 : 0; setKbdState(buffer, 0, 1, 0); thisa->keyLayout[vk_key].qtKey[2] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); thisa->keyLayout[vk_key].deadkeys |= isDeadKey != 0 ? 4 : 0;

user2132 ()