powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
11 сообщений из 36, страница 2 из 2
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38414931
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

>поставь synchronousOnRelease в true
Откуда такая уверенность и в каком месте предлагаешь это сделать?

Но боюсь такой подход породит другие проблемы в самом неожиданном месте.
Или какой-то другой объект будет порушен раньше времени.

М.б. все-таки проверить объект "на вменяемость" перед выполнением действа дающее краш? Чем моя идея плоха?
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38414941
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>поставь synchronousOnRelease в true
нельзя так делать.
это с факсом связано: тел. соединения уже нет, а факс чего-то там пытается, а статистику отдает чуть позже.
факс в Opal это плагин и его нельзя так просто взять и грохнуть по окончании вызова, а synchronousOnRelease это дело как-то контролирует.

надо все-таки ловить исключение/проверять вменяемость. Но не получается у меня.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  PWaitAndSignal m(phaseMutex);
...
  if (phase < ReleasingPhase || (phase == ReleasingPhase && phaseToSet == ReleasedPhase))
    phase = phaseToSet;

  private:
    PMutex               phaseMutex;
    Phases               phase;

    enum Phases {
      UninitialisedPhase,   //!< Indicates the OpalConnection instance has just been constructed
      SetUpPhase,           //!< In the process of sending/receiving the initial INVITE packet
      ProceedingPhase,      //!< The remote is now responsible for completing the call
      AlertingPhase,        //!< The remote says there is a phone ringing, somewhere
      ConnectedPhase,       //!< There is agreement on having a call, usually means billing will apply
      EstablishedPhase,     //!< Media is flowing, control streams  are all operational
      ForwardingPhase,      //!< Connection is in the process of being forwarded
      ReleasingPhase,       //!< Hangup packet has been sent/received, media and control not yet stopped
      ReleasedPhase,        //!< Media and control streams have been terminated
      NumPhases             //!< Number of available phases. Can be used to indicate an unknown phase
    };


Код: 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.
typedef PCriticalSection PMutex;
#ifdef _WIN32

class PCriticalSection : public PSync
{
  PCLASSINFO(PCriticalSection, PSync);

  public:
  /**@name Construction */
  //@{
    /**Create a new critical section object .
     */
    PCriticalSection();

    /**Allow copy constructor, but it actually does not copy the critical section,
       it creates a brand new one as they cannot be shared in that way.
     */
    PCriticalSection(const PCriticalSection &);

    /**Destroy the critical section object
     */
    ~PCriticalSection();

    /**Assignment operator is allowed but does nothing. Overwriting the old critical
       section information would be very bad.
      */
    PCriticalSection & operator=(const PCriticalSection &) { return *this; }
  //@}

  /**@name Operations */
  //@{
    /** Create a new PCriticalSection
      */
    PObject * Clone() const
    {
      return new PCriticalSection();
    }

    /** Enter the critical section by waiting for exclusive access.
     */
    void Wait();
    inline void Enter() { Wait(); }

    /** Leave the critical section by unlocking the mutex
     */
    void Signal();
    inline void Leave() { Signal(); }

    /** Try to enter the critical section for exlusive access. Does not wait.
        @return true if cirical section entered, leave/Signal must be called.
      */
    bool Try();
  //@}


#include "msos/ptlib/critsec.h"

};

#endif



Вот как мне проверить что phase это не CXX0030 Error: expession can not be evaluated?
Но там не 0, при этом. Скорее Nothing.

Или как проверить phaseMutex не состоит из CXX0030 Error: expession can not be evaluated?

Как понять что *this еще жив?
Вообще то ситуация странная, ибо this - это объект OpalConnection и вызывается его же ф-ция
OpalConnection ::SetPhase

Я всего-то хочу
Код: plaintext
1.
2.
3.
4.
5.
6.
If (задница)
  поток -> спать
  поток -> на выход (как вариант)
else
  делай код как написано
endif


ну или
Код: plaintext
1.
2.
3.
4.
5.
6.
try
  Делай код
catch
  поток -> спать
  поток -> на выход (как вариант)
endif



Проконтролировать код на предмет чтоб такой ситуации не было мне не по зубам (я на это и не претендую).
Поэтому единственный вариант - заморозить и выкинуть поток, но при этом чтоб он не рванул приложение.
Если задница, значит данный Connection уже не нужен, а полужив он только потому
что из-под него запущена эта задница.
Это неправильно конечно, но боюсь самый безобидный вариант.
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38414945
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77М.б. все-таки проверить объект "на вменяемость" перед выполнением действа
дающее краш? Чем моя идея плоха?
Тем, что она неосуществима. В принципе невозможно в общем случае проверить указатель на
валидность.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38414947
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Но вариантов то не много.

Вот читаю (ответ #6)
http://stackoverflow.com/questions/4595675/determining-whether-pointer-is-valid
Подсунуть пустышку "#define DATA_MAGIC 0x12345678" в какой-то свой элемент при инициализации класса (OpalConnection)
потом проверить равно ли значение пустышке?
Если НЕТ, то задница.

не?
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38414975
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДелай TRY/CATCH на самом верху логики работы.

Ну вот только это и помогло:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
void OpalConnection::OnReleased()
{ 
  PTRACE(3, "OpalCon\tOnReleased " << *this);

  CloseMediaStreams();

  endpoint.OnReleased(*this);

  __try
  {
    SetPhase(ReleasedPhase);
  }
  __except(EXCEPTION_EXECUTE_HANDLER)
  {
    PTRACE(3,"Thread is closed!");
    ExitThread(13);    
    //PTRACE(3,"Thread is sleeping!");
    //Sleep(INFINITE);
  }
}



Что интересно, чтоб вылетало больше одного раза я в логе не нашел.
Хотя я не уверен что я убиваю поток через ExitThread(13); -лог это не показывает.
И не уверен что это надо - заснул и черт с ним.

Код: plaintext
1.
2.
3.
4.
5.
2013/10/03 04:45:27.890	     PSimpleThread:6492	Call[Ceeaac12f363] cleared (EndedByRemoteUser)
2013/10/03 04:45:27.890	     PSimpleThread:6492	OpalMan	OnClearedCall Call[Ceeaac12f363] from "t38:FaxTester" to "sip:400@192.168.11.2"
2013/10/03 04:45:27.890	     PSimpleThread:6492	OpalCon	SetPhase from ReleasingPhase to ReleasedPhase for PObject
2013/10/03 04:45:27.890	     PSimpleThread:6492	Thread is closed! //ну это я так считаю.???????
2013/10/03 04:45:27.890	               Pool:964	OpalMan	OnOpenMediaStream 



За считанные доли милисекунды объект Connection превращается в гадкий пустой PObject.
Почему -ХЗ.

Автор Opal кстати ответил:

Robert JongbloedAll I can suggest is that it is a dangling pointer issue.
That is, there is an "OpalConnection *" that is still pointing at the connection object instance after it has been deleted.
It should use a PSafePtr<OpalConnection> instead.

I cannot be 100% certain, but I am very sure that there are none in OPAL itself,
but I cannot say the same for the application.

Но это мало что дает.
Надеюсь моего "фикса" хватит и он не приведет к другим глобальным проблемам.

Хотя, пока писал, прога отработала и проверил одну вещь.
Есть проблема. Вызовов нет, показывает 59 линий свободно. Тестировал "60 линий", одна "сдохла".
Значит не закрыл поток, и объект не убрался из коллекции Connection.
А надо бы как то его добить.

М.б.
delete *this
Не?
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38415064
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

РОдной, пойми ты наконец,

"CXX0030 Error: expession can not be evaluated" — это ошибка ДЕБАГЕРА во время отладки, а не программы во время выполнения.

Хотя и вызваны они одной причиной — неверным адресом в указателе — это разные вещи.

Это тебе не бейсик.
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38415068
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДмитрий77М.б. все-таки проверить объект "на вменяемость" перед выполнением действа
дающее краш? Чем моя идея плоха?
Тем, что она неосуществима. В принципе невозможно в общем случае проверить указатель на
валидность.


Ну, на самом деле можно иногда....
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38415077
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Dimitry Sibiryakov,

Но вариантов то не много.

Вот читаю (ответ #6)
http://stackoverflow.com/questions/4595675/determining-whether-pointer-is-valid
Подсунуть пустышку "#define DATA_MAGIC 0x12345678" в какой-то свой элемент при инициализации класса (OpalConnection)
потом проверить равно ли значение пустышке?
Если НЕТ, то задница.

не?

Эта пустышка — ноль, нулевой указатель.
Только проблема в том, что возможно тебе недоступно место инициализации (если доступно, то надо несомненно ее добавить), и что возможно указатель затирается левым значением, которое неотличимо от нормального.

Есть ещё функция IsValidHeapPointer, ее можно иногда применять.
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38415164
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭта пустышка — ноль, нулевой указатель.
Это бесполезно. Да, попытался, запихивается в инициализацию класса.
Пустышка (и любой другой способ) пройдет проверку "на вшивость",
а при выполнение следующей строчки объект "бабахнет".
Где бабахнет, там и вылетет, проверки не помогут.

Поэтому единственный вариант - стеречь вылет в ЛЮБОМ месте.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  __try
  {
    SetPhase(ReleasedPhase);
  }
  __except(EXCEPTION_EXECUTE_HANDLER)
  {
    PTRACE(3,"Thread is closed!");
    ExitThread(13);    
    //Sleep(INFINITE);
  }


И ДА, это работает, наконец то! Поток кстати думаю (через задницу) но выходит, раз краш не вылазит в другом месте.

Автор кстати еще написал:
авторIf you are using the code I think you are that starts a thread using:

void OpalFaxConnection::ReleaseConnection(PThread &, INT)
{
if (LockReadWrite()) {
Release(OpalConnection::EndedByLocalUser);
UnlockReadWrite();
}
}

So the conection is locked until the thread exits.

And yet there is a:

2013/10/03 04:45:27.875 Opal Garbage:9080 OpalCon Connection Call[Ceeaac12f363]-EP<fax>[F7e8f253c364] destroyed.

just before the crash where it is deleted. I would have said that was impossible as the connection is locked..
Т.е. пишет, не может такого быть. Заблокирован и баста, прорваться не возможно.

А на деле очень даже возможно.

Хотя он тут же добавил:
авторMy only suggestion is to change the LockReadWrite to SafeReference() and UnlockReadWrite() to SafeDereference()..
А в след. письме просто настаивает на этой замене.
Вот я сейчас поменял и тестирую (защиту __except пока не снял, но логирование тоже не отключал). И что интересно пока в логе слов PTRACE(3,"Thread is closed!"); не вижу. Может и вылечилось по нормальному.

Но, веселухи хватает.
Стал получать Transport Error после большого к-ва звонков.
Выяснил. После 1000 звонков RTP порты диапазон 5000-5999 тупо заканчиваются.
Счас увеличил 5000-15000 чтоб не мешало тестированию.
А попутно написал автору, с чего он им FREE не делает и где копать.

P.S.Пока писал закончился тест 3000 вызовов на 60 линий за ~25 минут.
И о чудо - я не вижу в логе записи о срабатывании моего исключения.
60 каналов на месте, CPU_Usage=0-2%, прога жива.
Suggestion вроде правильный оказался, видимо SafeReference сильнее.
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38415436
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чайники часто думают, что код, стоящий после создания потока, выполняется после кода
созданного потока. Они заблуждаются.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
    #38415516
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Не знаю что там чайники думают,
но я думаю что код выполняется параллельно (на то он и поток) и может вбабахать между строк основного кода.
Собственно это и имело место быть (объект мог удалиться в любом месте выполнения ф-ции SetPhase).
Слабое место был критерий locked -он мог не выполниться.
Теперь видимо выполняется с гарантией.

P.S. На VB6 телефонию нормально не напишешь. Как раз потому что с потоками там туго, не потому что язык тупой.
PP.S А вот на VB.NET наверно вполне.
PPP.S. Но мне честно хватает раскопок в имеющейся реализации, а основное время я лучше потрачу на "перделки и свистелки".
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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