crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Запуск приложения из под среды и не из под среды
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
mezmay Дата 2.11.2010, 10:24
  Открыл справку Dependecy Walker'a. Там рассматривается случай когда приложение, запускаемое из под Dependecy Walker'a может работать лучше, чем запускаемое само по себе:

-----
Q: My application runs better when being profiled by Dependency Walker than when I run it by itself. Why is this?
A: I've had several reports of applications that normally crash, will not crash when being profiled under Dependency Walker. Dependency Walker acts as a debugger when you are profiling your application. This in itself, makes your program run differently.

First, there is the overhead of Dependency Walker that slows the execution of your application down. If your application is crashing due to some race condition, this slow down alone might be enough to avoid the race condition. If this is the case, it is a design issue of the application and you are just getting lucky when it doesn't crash.

Second, normally when threads block on critical sections, events, semaphores, mutexes, etc., they unblock on a first-in-first-out (FIFO) basis. This is not guaranteed by the OS, but is usually the case. When being run under a debugger, FIFO queues are sometimes randomized, so threads may block and resume in a different order than they would when not running under a debugger. This might be relieving a race condition or altering the execution enough to make things work. Again, the application is just getting lucky when it doesn't crash.

Finally, applications running under the debugger automatically get a system debug heap. All memory functions are handled slightly different. Allocations are padded with guard bytes to check to see if you are writing outside of a region you have allocated (buffer overrun/underrun). Allocations might also be laid out differently in memory then when not under the debugger. So, if you are writing past the end of a buffer under the debugger, you might be trashing guard bytes, freed memory, or just something not very critical. However, when not running under the debugger, you might be trashing something critical (like a pointer), and your app crashes.

For the debug heap, you can turn this off in Dependency Walker and see if your application crashes when being profiled. If it does then, then you probably suffer a buffer overrun, stray/bad/freed pointer, etc. To do this, start a command prompt. Type "SET _NO_DEBUG_HEAP=1". Then start Dependency Walker from that command line. This should disable the debug heap for that instance of Dependency Walker. Note, this only works on Windows XP and beyond.
-----

Отсюда я понял, что приложение в Dependecy Walker'e запускается в замедленном, отладочном режиме и с поддержкой system debug heap. Обработка всех функций памяти немного отличается. Вывод - ошибка в приложении, которая не проявляется в отладочном режиме и проявляется в боевом.
Еще там советуется отключить поддержку system debug heap, запустив Dependecy Walker из командной строки, установив параметр _NO_DEBUG_HEAP=1.
Запустил в таком режиме, и fancybrowser перестал корректно работать.

Что получается ? - глючит Qt?

Я использую Qt 4.6.3 под Windows XP. Переходить на 4.7.0 не вариант потому что 4.7.0 не работает с картами гугла, а мне это обязательно нужно
mezmay Дата 2.11.2010, 9:44
  Запустил релиз fancybrowser ИЗ ПОД Dependecy Walker'a.

РАБОТАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

что теперь делать то? застрелиться?
почему экзешник то работать не хочет?
Что Dependecy Walker добавляет?
igor_bogomolov Дата 1.11.2010, 21:18
  mezmay, у меня все работает. Проверял на Windows Vista Qt4.7.0
Litkevich Yuriy Дата 1.11.2010, 21:07
 
Цитата(mezmay @ 2.11.2010, 1:04) *
Ни на какой конкретный
конкретные в дереве помечаются и в списке, обычно красным цветом. В окне сообщения только резюме пишется
mezmay Дата 1.11.2010, 21:04
 
Цитата
стало быть это dll'ка не из каталога %QTDIR%/bin, т.к. они все загружаются при старте приложения. Отложенная загрузка - обычно проблема с плагинами.
посмотри на какой именно плагин ругается.

Ни на какой конкретный, просто варнинг и все
Litkevich Yuriy Дата 1.11.2010, 20:26
 
Цитата(mezmay @ 2.11.2010, 0:05) *
in a delay-load dependent
стало быть это dll'ка не из каталога %QTDIR%/bin, т.к. они все загружаются при старте приложения. Отложенная загрузка - обычно проблема с плагинами.
посмотри на какой именно плагин ругается.

Цитата(mezmay @ 2.11.2010, 0:05) *
и еще показал ошибку контрольной суммы у Qtcored4.dll и Qtcore4.dll для дебага и релиза соответственно
такое я как-то видел, сути не понял и на работу моей программы не влияло.
mezmay Дата 1.11.2010, 20:05
  dependency walker выдал в обоих случаях:
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module

и еще показал ошибку контрольной суммы у Qtcored4.dll и Qtcore4.dll для дебага и релиза соответственно
mezmay Дата 1.11.2010, 19:01
  Итак, что мы имеем. Правильная программа, без ошибок (я про fancybrowser) работает в режиме дебаг и неправильно работает в режиме релиз. (При этом в обоих режимах работает из под среды...). Экзешники, полученные в результате компиляции дебага и релиза отличаются, как я понимаю, зависимостями (отладочная информация не влияет на работу). А именно - релизный экзешник зависит от:
1. Релизных dll Visual Studio
2. Релизных dll Qt

Дебажный экзешник - соответственно от дебаг-версий этих dll.
Ломаю голову что это может означать... глючат релизные dll Qt?...

Цитата
mezmay, запусти (!) свою программу в Dependency Wallker и посмотри, что программа пытается подгружать во время выполнения.


а как анализировать эту информацию? ну получу я списки dll, и что с ними делать?

Litkevich Yuriy Дата 1.11.2010, 18:46
  mezmay, запусти (!) свою программу в Dependency Wallker и посмотри, что программа пытается подгружать во время выполнения.
mezmay Дата 1.11.2010, 18:33
  Можно компилировать стандартный пример fancybrowser.

Как я уже выяснил, если откомпилировать его в режиме дебаг и запускать экзешник, то все ок, и при открытии в нем приложенной хтмл-страницы линейка включена (при нажатии на карту появляются красные точки соединенные линиями).
если откомпилировать в режиме релиз - не работает. Вывод - дело в опциях компилятора. Вопрос - как все таки откомпилировать в режиме релиз?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 5.5.2024, 3:42