Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Вниз

Глюки при работе программы на многопроцессорной машине   Найти похожие ветки 

 
Андрей Жук ©   (2005-07-26 12:35) [0]

Вобщем, есть отлаженная программа. Работает соответственно ТЗ, уже более года. Недавно поменяли сервер БД, поставили 2-х поцессорную машину с Win2003. В качестве эксперимента запускал приложение непосредственно на сервере. Так вот, при запуске программы иногда сразу получаем exception о попытке чтения по некоему адрессу. Ошибка возникает непостоянно. Отлаживать прямо на сервере, понятно, возможности нет. В принципе проблемы особой нет, ведь сервер не предназначен для работы прикладных программ. Но как бы все же отладить данную ошибку?


 
WondeRu ©   (2005-07-26 12:59) [1]

Андрей Жук ©   (26.07.05 12:35)
Отлаживать прямо на сервере, понятно, возможности нет.

а как же Remote Debugging?


 
Андрей Жук ©   (2005-07-26 13:02) [2]


> а как же Remote Debugging?

А шо это?
Вообще, машина у заказчика, еще и географические трудности накладываются.


 
Alexander Panov ©   (2005-07-26 13:03) [3]

Андрей Жук ©   (26.07.05 12:35)

Отлаживай на компьютере с гипертрейдингом.


 
han_malign ©   (2005-07-26 13:19) [4]

Где то забыли критическую секцию.
Если на одном процессоре элементарные целочисленные операции(на памяти) атомарные, то на многопроцессорной уже нет... Где то глобальный флаг забыли обезопасить.

Хотя возможно все проще, где то забыли про IsMultiThread:= true. Обычно про это забывают в DLL которая дергается из нескольких потоков - у главного приложения другой Instance и соответсвенно отдельный флаг - так он взводится в BeginThread, но DLL этого не видит... Из-за этого возникают проблемы с менеджером памяти(любые динамические структуры - строки, массивы, Get/FreeMem), который в зависимости от этого флага работает в одном из двух режимов - с критической секцией или без...


 
WondeRu ©   (2005-07-26 13:48) [5]

Андрей Жук ©   (26.07.05 13:02) [2]
А шо это?
Вообще, машина у заказчика, еще и географические трудности накладываются.


тащишь ноутбук с делфой на объект!

Автор: Андрей Бороздин

Довольно часто в КГ в рубрике "Программирование" можно встретить советы для начинающих программистов в среде Delphi. Однако порой газету читают и законченные программеры. Именно для них, а также для тех, кто уже имеет определенный опыт программирования, и предназначена эта статья.

Не часто, но бывает так, что программа на твоем компьютере, где стоит среда разработки, запускается и работает замечательно, а вот на другой машине, например, на машине клиента, возникают какие-нибудь непонятные ошибки. Существует несколько способов отладки таких программ. Во-первых, можно поставить среду разработки пользователю на машину и там попробовать отладить программу. Однако этот вариант вряд ли можно считать удачным и отличающимся изяществом. К тому же пропадет чистота эксперимента: инсталляция Delphi может заменить какие-нибудь старые системные библиотеки Windows более новыми, после чего ошибка в программе может уже и не возникнуть. К тому же может помешать отсутствие свободного пространства на диске или нежелание пользователя. Следующий наиболее простой и незатейливый вариант — это в той части программы, где, как вы предполагаете, находится ошибка, расставить функции MessageBox (или ShowMessage) с каким-нибудь сообщением и, таким образом, более четко определить место возникновения ошибки. Этот вариант прост, как все гениальное, но обладает рядом существенных недостатков:
1. Это довольно долго и утомительно. Каждый раз приходится убирать старые функции и расставлять новые, перекомпилировать программу и копировать ее на машину клиента.
2. Ошибка может возникать в том месте, где поставить свою функцию весьма непросто. Например, в одном из стандартных модулей Delphi.
3. Ну и, наконец, можно просто банально забыть убрать какой-нибудь из MessageBox"ов. Сам так не раз прокалывался.
Однако в ряде случаев этот вариант может оказаться единственно возможным. Еще один вариант отладки таких программ предназначен для тех, у кого рабочая машина и машина клиента находятся в локальной сети.
В состав инсталляции Delphi входит небольшая, но очень полезная утилита — Remote Debugging. Ее инсталляция находится в папке rdebug. Назначение Remote Debugging, как следует из названия, — это удаленная отладка программ. Как раз наш случай, лучше и не придумаешь.
Но прежде чем воспользоваться всеми прелестями удаленной отладки программы в среде Delphi, Remote Debugging надо скопировать на машину пользователю, проинсталлировать и запустить. После чего в System Tray"е появится изображение зеленого жучка. Вернемся к нашему проекту. В опциях проекта (Project|Options) необходимо произвести следующие изменения:
1. На вкладке Linker включить опцию Include remote debug symbols.
2. На вкладке Directories/Conditionals в поле Output directory необходимо указать путь к общедоступной папке на машине клиента (с именем машины). Если сделать это затруднительно, то можно указать папку на своей машине, а полученные после компиляции файлы с расширениями exe и rsm каждый раз копировать на машину клиента.
3. Нажмите кнопку ОК.
Далее перейдем к параметрам, с которыми будет запускаться программа (Run|Parameters). На вкладке Remote необходимо указать следующие данные:
1. В поле Remote Path указать путь и имя файла на удаленной машине, где находится исполняемый файл, с сетевым именем удаленной машины.
2. В поле Remote Host надо указать сетевое имя удаленной машины или ее IP адрес.
3. Далее можно сделать следующее:
Включить опцию Debug Project on remote machine и нажать кнопку ОК. Тогда после выполнения команды Run (F9) вы запустите сессию удаленной отладки.
Или так:
Нажать кнопку Load, чтобы сразу начать сессию удаленной отладки. Разумеется, на удаленной машине уже должны быть исполняемый файл (.exe) и файл для удаленной отладки (.rsm).
После всех этих нехитрых манипуляций с настройками проекта и параметрами запуска на удаленной машине должна запуститься программа, а Delphi — перейти в состояние отладки. Далее удаленная отладка программы ничем не отличается от обычной отладки любой программы.
Ну, вот, пожалуй, и все. Успешной отладки, господа программисты!


 
han_malign ©   (2005-07-26 14:03) [6]

>расставить функции MessageBox (или ShowMessage) с каким-нибудь сообщением
- гы... Нормальные люди используют текстовые логи.
А ловить в отладчике нестабильную ошибку - дело гиблое, помогают только try-except и логи чуть ли не через строку. Процес удаленной отладки сводится к обмену логами/релизом...



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
14-1122567143
Ego
2005-07-28 20:12
2005.08.21
Творческий кризис.


14-1122444403
zamik
2005-07-27 10:06
2005.08.21
Настройка SHDSL модемов


3-1121239183
cvg
2005-07-13 11:19
2005.08.21
Почему может быть не найдено поле?


14-1122495978
Qwertyk
2005-07-28 00:26
2005.08.21
Как избавиться от разводов


4-1117836874
Вадим Станкевич
2005-06-04 02:14
2005.08.21
Как отловить открытие/закрытие дверцы CD-ROM?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский