powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / мониторинг работы программы
11 сообщений из 11, страница 1 из 1
мониторинг работы программы
    #35132041
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно мониторить корректную работы программы, какие уже есть для этого инструменты(типа watchdog)?

P.S. Не могу отловить причину зависания программы на VB, внешне все работает, циклы крутятся, а данные не снимаются и не пишутся в логи. Отладки добавил, но она либо сильно забивает винт, либо ничего не дает. Сбой появляется примерно через несколько недель работы и ни как со временем работы не корелируется =(
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35132100
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: MikeTech
> Как можно мониторить корректную работы программы, какие уже есть для
> этого инструменты(типа watchdog)?

Подобавлять в интересующие места вызов функции OutputDebugString и
мониторить DebugView раньше была http://www.sysinternals.com теперь не знаю
:( В утилите можно настраивать сохранение логов.
>
> P.S. Не могу отловить причину зависания программы на VB, внешне все
> работает, циклы крутятся, а данные не снимаются и не пишутся в логи.

Данные должны сниматся откуда??? Может быть долгое соединение в местом
откуда снимаются данные приводит к этому эффекту? Не пробовал
пересоединятся?

> Отладки добавил, но она либо сильно забивает винт, либо ничего не
> дает.
Что значит сильно забивает винт??? У тебя винт 800Мб??

> Сбой появляется примерно через несколько недель работы и ни как со
> временем работы не корелируется =(

Сделай включаемым вывод информации мониторинга не сразу, а спустя какое-то
время

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35132200
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос
> Автор: MikeTech
> Как можно мониторить корректную работы программы, какие уже есть для
> этого инструменты(типа watchdog)?

Подобавлять в интересующие места вызов функции OutputDebugString и
мониторить DebugView раньше была http://www.sysinternals.com теперь не знаю
:( В утилите можно настраивать сохранение логов.
>
> P.S. Не могу отловить причину зависания программы на VB, внешне все
> работает, циклы крутятся, а данные не снимаются и не пишутся в логи.

Данные должны сниматся откуда??? Может быть долгое соединение в местом
откуда снимаются данные приводит к этому эффекту? Не пробовал
пересоединятся?

> Отладки добавил, но она либо сильно забивает винт, либо ничего не
> дает.
Что значит сильно забивает винт??? У тебя винт 800Мб??

> Сбой появляется примерно через несколько недель работы и ни как со
> временем работы не корелируется =(

Сделай включаемым вывод информации мониторинга не сразу, а спустя какое-то
время

Posted via ActualForum NNTP Server 1.4

Напишите плс declare для OutputDebugString?
Данные собираются с датчиков температуры ds18b20 по 1-wire, в двух из трех случаях висло именно на процедуре сбора данных, хотя выхода из нее нет, чтобы в никуда
Главный цикл два раза в секунду, т.е. данных будем очень много.
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35132248
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала , откажись от использования контрола Timer в программе. используй системный таймер. перепиши прогу как сервис. контролируй ее через WMI, например, если надо принудительно перезапускай.
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35134448
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
#if WIN32 Then
Public Declare Sub OutputDebugString Lib "kernel32" Alias "OutputDebugStringA" (ByVal lpOutputString As String)
#else 
Public Declare Sub OutputDebugString Lib "kernel" (ByVal lpOutputString As String)
#endif 'WIN32
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35135219
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneдля начала , откажись от использования контрола Timer в программе. используй системный таймер. перепиши прогу как сервис. контролируй ее через WMI, например, если надо принудительно перезапускай.

Примеры работы с системный таймером покажите плс.
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35135468
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надеюсь, продолжение найдете. вот часть кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
'**************************************************
'* NT Service sample                              *
'* © 2000-2004 Sergey Merzlikin                   *
'* http://www.smsoft.ru                           *
'* e-mail: sm@smsoft.ru                           *
'* The code is freeware. It may be used           *
'* in programs of any kind without permission     *
'**************************************************

Public Const INFINITE = - 1 &      '  Infinite timeout
Private Const WAIT_TIMEOUT =  258 &

Public Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion( 1  To  128 ) As Byte
End Type

Public Const VER_PLATFORM_WIN32_NT =  2 &
Private Const STATUS_TIMEOUT = &H102&
Private Const QS_KEY = &H1&
Private Const QS_MOUSEMOVE = &H2&
Private Const QS_MOUSEBUTTON = &H4&
Private Const QS_POSTMESSAGE = &H8&
Private Const QS_TIMER = &H10&
Private Const QS_PAINT = &H20&
Private Const QS_SENDMESSAGE = &H40&
Private Const QS_HOTKEY = &H80&
Private Const QS_ALLINPUT = (QS_SENDMESSAGE Or QS_PAINT _
        Or QS_TIMER Or QS_POSTMESSAGE Or QS_MOUSEBUTTON _
        Or QS_MOUSEMOVE Or QS_HOTKEY Or QS_KEY)
Private Declare Function MsgWaitForMultipleObjects Lib "user32" _
        (ByVal nCount As Long, pHandles As Long, _
        ByVal fWaitAll As Long, ByVal dwMilliseconds _
        As Long, ByVal dwWakeMask As Long) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

Public hStopEvent As Long, hStartEvent As Long, hStopPendingEvent As Long
Public IsNT As Boolean, IsNTService As Boolean
Public ServiceNamePtr As Long
Public ServiceName As String
'

...

Private Sub ServiceMain(ServiceName As String)
Dim hnd As Long
Dim h( 0  To  1 ) As Long
Dim Interval As Long

    ' Only one instance
    If App.PrevInstance Then Exit Sub
    ' Check OS type
    IsNT = CheckIsNT()
    ' Creating events
    hStopEvent = CreateEventW( 0 &,  1 &,  0 &,  0 &)
    hStopPendingEvent = CreateEventW( 0 &,  1 &,  0 &,  0 &)
    hStartEvent = CreateEventW( 0 &,  1 &,  0 &,  0 &)
    ServiceNamePtr = StrPtr(ServiceName)
    If IsNT Then
        ' Trying to start service
        hnd = StartAsService
        h( 0 ) = hnd
        h( 1 ) = hStartEvent
        ' Waiting for one of two events: sucsessful service start (1) or
        ' terminaton of service thread (0)
        IsNTService = MsgWaitObj(INFINITE, h( 0 ),  2 &) =  1 &
        If Not IsNTService Then
            CloseHandle hnd
            MessageBox  0 &, "This program must be started as a service.", App.Title, vbInformation Or vbOKOnly Or vbMsgBoxSetForeground
        End If
    Else
        MessageBox  0 &, "This program is only for Windows NT/2000/XP/2003.", App.Title, vbInformation Or vbOKOnly Or vbMsgBoxSetForeground
    End If
    
    If IsNTService Then
        ' ******************
        ' Here you may initialize and start service's objects
        ' These objects must be event-driven and must return control
        ' immediately after starting.
        ' ******************
        If Service_Initialize(ServiceName) =  0  Then
          SetServiceState SERVICE_RUNNING
          Do
              ' ******************
              ' It is main service loop. Here you may place statements
              ' which perform useful functionality of this service.
              ' ******************
              ' Loop repeats every second. You may change this interval.
            Interval = Service_Loop()
          Loop While MsgWaitObj(Interval, hStopPendingEvent,  1 &) = WAIT_TIMEOUT
        End If
        ' ******************
        ' Here you may stop and destroy service's objects
        ' ******************
        Service_Terminate
        SetServiceState SERVICE_STOPPED
        SetEvent hStopEvent
        ' Waiting for service thread termination
        MsgWaitObj INFINITE, hnd,  1 &
        CloseHandle hnd
    End If
    CloseHandle hStopEvent
    CloseHandle hStartEvent
    CloseHandle hStopPendingEvent
End Sub

' CheckIsNT() returns True, if the program runs
' under Windows NT or Windows 2000, and False
' otherwise.
Public Function CheckIsNT() As Boolean
    Dim OSVer As OSVERSIONINFO
    OSVer.dwOSVersionInfoSize = LenB(OSVer)
    GetVersionEx OSVer
    CheckIsNT = OSVer.dwPlatformId = VER_PLATFORM_WIN32_NT
End Function

' The MsgWaitObj function replaces Sleep,
' WaitForSingleObject, WaitForMultipleObjects functions.
' Unlike these functions, it
' doesn't block thread messages processing.
' Using instead Sleep:
'     MsgWaitObj dwMilliseconds
' Using instead WaitForSingleObject:
'     retval = MsgWaitObj(dwMilliseconds, hObj, 1&)
' Using instead WaitForMultipleObjects:
'     retval = MsgWaitObj(dwMilliseconds, hObj(0&), n),
'     where n - wait objects quantity,
'     hObj() - their handles array.

Public Function MsgWaitObj(Interval As Long, _
            Optional hObj As Long =  0 &, _
            Optional nObj As Long =  0 &) As Long
    Dim t As Long, T1 As Long
    If Interval <> INFINITE Then
        t = GetTickCount()
        On Error Resume Next
        t = t + Interval
        ' Overflow prevention
        If Err <>  0 & Then
            If t >  0 & Then
                t = ((t + &H80000000) _
                + Interval) + &H80000000
            Else
                t = ((t - &H80000000) _
                + Interval) - &H80000000
            End If
        End If
        On Error GoTo  0 
        ' T contains now absolute time of the end of interval
    Else
        T1 = INFINITE
    End If
    Do
        If Interval <> INFINITE Then
            T1 = GetTickCount()
            On Error Resume Next
         T1 = t - T1
            ' Overflow prevention
            If Err <>  0 & Then
                If t >  0 & Then
                    T1 = ((t + &H80000000) _
                    - (T1 - &H80000000))
                Else
                    T1 = ((t - &H80000000) _
                    - (T1 + &H80000000))
                End If
            End If
            On Error GoTo  0 
            ' T1 contains now the remaining interval part
            If IIf((T1 Xor Interval) >  0 &, _
                T1 > Interval, T1 <  0 &) Then
                ' Interval expired
                ' during DoEvents
                MsgWaitObj = STATUS_TIMEOUT
                Exit Function
            End If
        End If
        ' Wait for event, interval expiration
        ' or message appearance in thread queue
        MsgWaitObj = MsgWaitForMultipleObjects(nObj, _
                hObj,  0 &, T1, QS_ALLINPUT)
        ' Let's message be processed
        DoEvents
        If MsgWaitObj <> nObj Then Exit Function
        ' It was message - continue to wait
    Loop
End Function
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35135959
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос
> Автор: MikeTech
> Как можно мониторить корректную работы программы, какие уже есть для
> этого инструменты(типа watchdog)?

Подобавлять в интересующие места вызов функции OutputDebugString и
мониторить DebugView раньше была http://www.sysinternals.com теперь не знаю
:( В утилите можно настраивать сохранение логов.
>
Posted via ActualForum NNTP Server 1.4

Как можно ловить OutputDebugString из своей проги на VB и по результатам отсутствия, что то делать, а не просто смотреть что есть какие-либо сообщения по OutputDebugString?
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35136242
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: MikeTech
> Как можно ловить OutputDebugString из своей проги на VB и по
> результатам отсутствия, что то делать, а не просто смотреть что есть
> какие-либо сообщения по OutputDebugString?

Ты хочешь, что бы я научил тебя отладке? =-O
Нет не буду, купи лучше книгу Род Стивенс "Тестирование и отладка программ
на Visual Basic"
или "Отладка в C++. Руководство для разработчиков"
Крис Х. Паппас, Уильям Х. Мюррей III почитай основы.

Ты не знаешь и соответсвенно не понимаешь что происходит с программой,
спустя какое-то время. Тем более эти датчики для тебя черный ящик. В вывод
OutputDebugString можно сбрасывать, например результаты опроса состояния
этих датчиков, если эта возможность есть, или текущее состояние твоих
переменных, которые работают с датчиками, или ещё что, я не могу тебе
сказать т.к. нет технической информации по оборудованию тебе виднее на
месте. Вообщем вывод информации по которой можно хоть построить какие-то
предположения о том что происходит. Ещё я добавил бы в программу обработку
или какого-нибудь своего WM_USER+... сообщения по которому снималась бы вся
информация о всем, что даже теоретически может влиять на работу, и
выполнялась бы переинициализация этих датчиков или пересоединение с ними,
опять тебе видней, ведь при перезапуске программы, когда перестают приходить
данные происходит именно это. Вообщем работы поле не паханное ;-)
Пока будут накапливатся данные, можно не теряя времени написать анализатор
логов. И я вообще несколько удивлен, что об отладке и сопровождении начинают
думать тогда, когда программа написанна и уже работает, а не на этапе
проектирования :(

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35143257
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не нужно меня учить отладке, тонкости работы датчиков я знаю у них нет проблемы с зависанием, практикой это подтверждено.

Зависает именно самописная программа, по этому для анализа ее "живости" и снятия данных для отладки, я так понял, можно использовать OutputDebugString.
Соответственно программы должна работать в online и я планировал перехватывать OutputDebugString от программы, и если там не появляется определенное сообщения за фиксированный период времени, то ее перезапускать.
Надеюсь я объяснил зачем мне "ловить OutputDebugString из своей проги на VB", а не книга и полкилометра текста с разъяснениями? =)
...
Рейтинг: 0 / 0
мониторинг работы программы
    #35143914
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: MikeTech
> Не нужно меня учить отладке, тонкости работы датчиков я знаю у них
> нет проблемы с зависанием, практикой это подтверждено.
>
> Зависает именно самописная программа, по этому для анализа ее
> "живости" и снятия данных для отладки, я так понял, можно использовать
> OutputDebugString.
> Соответственно программы должна работать в online и я планировал
> перехватывать OutputDebugString от программы, и если там не появляется
> определенное сообщения за фиксированный период времени, то ее
> перезапускать.
> Надеюсь я объяснил зачем мне "ловить OutputDebugString из своей проги
> на VB", а не книга и полкилометра текста с разъяснениями? =)

Почитай о WaitForDebugEvent, хотя я такое делал через RegisterWindowMessage
в одной программе отсылал, а в другой ловил, и если через определенный
интервал не приходило сообщение перезапускал программу, делалось правда на
С++

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / мониторинг работы программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]