Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Прога основана на Opal. Скомпилирована в VC++ 2005 EE. Если делать большую нагрузку (напр. 50 одновременных телефонных вызовов), то в какой-то момент может вылететь: proga.exe обнаружена ошибка. Приложение будет закрыто Кнопки : отладка, отправить отчет, не отправлять. Что интересно, если это краш-окно не трогать, то будет работать дальше, ущерба для функционала не заметил. Если нажать <отладка> то запускается VC++ 6.0 (у меня отладчик на него стоит). Сообщение: Unhandled exception in proga.exe: 0xC0000005. Access Violation. И картинка которую приложил - всегда одна и та же и числа (адреса? чего?) одни и те же. И чего делать дальше, как искать ошибку в коде глядя на ето? Я как баран на новые ворота на это смотрю. Один раз была в Opal одна ошибка. Developer попросил картинку (типа что я приложил) и глядя на нее исправил (о чудо) ошибку. Я пытался лечить затычками, ограничивая нагрузку в зависимости от пиков CPU Usage: Как получить загрузку CPU в % программно? Это все чуть помогает, но слабенько. Ошибка все одно вылазит. Пытался увеличить время ожидания завершения отдельных потоков внутри приложения по совету одного из авторов кода: thread->WaitForTermination(10000) -> thread->WaitForTermination(100000) Но это боюсь вообще не то. Коды то есть, но там черт не разберется. Дебаг проги (Opal-овский) включить конечно можно, но на 50 вызовов через 5 минут там будут гигабайты, + этот дебаг еще создаст свою нагрузку и задержки. Т.е. вопрос. Я получил картинку "Отладка", что и как мне делать дальше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 15:51 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Что интересно, если это краш-окно не трогать, то будет работать дальше, ущерба для функционала не заметил. Это неинтересно, поскольку значит всего лишь, что упал с AV и аварийно завершился один из рабочих потоков, остальные продолжают как-то работать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 16:04 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found Нет. Данная ошибка скорее всего вообще к делу не относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 16:05 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЭто неинтересно, поскольку значит всего лишь, что упал с AV и аварийно завершился один из рабочих потоков, остальные продолжают как-то работать. Ну, допустим плевать я хотел (как вариант) на это аварийное завершение. Только как сделать чтоб окно не выводилось и прога дальше работала? Сразу скажу, что речь идет не о моих самодельных потоках, которые недавно обсуждали: Как передать строковый параметр в CreateThread? Те я их полностью убрал (неэффективно и чревато). Сохраняю String(WM_COPYDATA) в глобальной переменной и обрабатываю String в таймере. String всегда единственный, если не пустой то таймер его обрабатывает. Но это вообще к тек. вопросу не относится. Просто уточнил, т.к. ты ту тему читал. Если это потоки, то это "родные опаловские", их там черт знает сколько создается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 16:37 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Сохраняю String(WM_COPYDATA) в глобальной переменной Стесняюсь спросить: а мьютекс вы используете при записи и чтении этой переменной потоками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 16:41 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Я ж сказал, что ТЕ (свои) бесполезные потоки я убрал и это к тек. вопросу отношения не имеет: Код: 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. От этого кода я отказался . Еще раз, это не имеет отношения к текущему вопросу. Крашит OPAL-овкая внутренность. При ОЧЕНЬ большой нагрузке (например 30 или 50 одновременных вызовов, а не 5 или 10). Причем там не просто РАЗГОВОР ПО ТЕЛЕФОНУ, там ФАКСЫ (SpanDSP - T.38 либо G.711 одновременно по всем 50 каналам)- чтоб было понятно про нагрузку. Хотя нагрузки там особой похоже и нет (я поставил ограничитель как смог ), ну 20% CPU, ну импульсы до 40%, а все равно крашит. При генерации указанной краш-ошибки ни одна из линий не вылетает и моя SendMessage конструкция (кусок кода которой я привел) тоже остается работоспособной, т.е. я бы просто эту ошибку ЗАБИЛ (если она критична, то оно потом вылезет, но не факт что реально критична), но знать бы как и куда копать . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 17:12 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Крашит OPAL-овкая внутренность. При ОЧЕНЬ большой нагрузке (например 30 или 50 одновременных вызовов, а не 5 или 10). Это либо баг в самом опале, либо в том, как ты его используешь. В любом случае тебе надо жаловаться автору опала чтобы либо исправил своего бага, либо поставил защиту от идиотов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 17:33 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Понятно что баг. Но одно дело при единственном звонке сделать лог и послать автору. Другое дело при куче звонков. Либо как-то искать самому, выуручиваться и т.п. (что я и пытаюсь), либо никак. Причем прога же сначала компилируется в Release (а в Debug оно кажется и не компилируется вообще), а потом запускается exe. Он и крашит. И знать бы где cout << воткнуть (в километрах то кода) Вариантов (как в VB6) запустить "Play" на проект а он воткнет в место ошибки в коде то нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 17:48 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77одно дело при единственном звонке сделать лог и послать автору.Другое дело при куче звонков. Нет, это одно и то же. При "куче звонков" просто вылазят баги в синхронизации потоков. Они имеют свои особенности, но ловятся точно так же: анализом стэка. Скачиваются .pdb файлы от библиотеки, настраивается DrWatson или аналогичная софтина на сброс дампа памяти, потом в отладчике анализируется backtrace. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 18:01 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, Твоя ошибка— защита памяти, обращение по несуществующие адресу, как забороть — очень сложно однозначно сказать, надо раскручивать логику и искать, где съезжает адрес. Это порой очень сложно, поскольку падать может совсем не,в том месте, где ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 18:33 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
MasterZiv как забороть — очень сложно однозначно сказать, ... Я предложил вариант ЗАБИТЬ , т.е. проигнорировать, но вот как это сделать. Dimitry Sibiryakov, либо в том, как ты его используешь... Есть одно соображение. Раньше я использовал такую "технологию пуляния файлами": Proga1(VB6) делает WriteFile -> Proga2(C++) делает ReadFile и наоборот Proga2(С++) делает WriteFile -> Proga1(VB6) делает ReadFile Сейчас я заменил на новую "отработанную" технологию. Proga1(VB6) делает SendMessage(CopyData) -> Proga2(C++) читает в WndProc и наоборот Proga2(С++) делает SendMessage(CopyData) -> Proga1(VB6) читает в WndProc Но здесь есть один недостаток. SendMessage не завершается пока не получит код возврата от того кому посылали. В примере кода выше: 14908427 хорошо видно что в case WM_COPYDATA результат возвращается сразу (спас VB6 приложения от "ожидания"), а обработка уже в WM_TIMER. Но то SendMessage которое в WM_TIMER (обратка) уже будет ждать пока VB6 его обработает. В данной ситуации это не страшно. Но я так же практикую: (Какой-то внутренний поток в C++) делает SendMessage(CopyData) -> Proga1(VB6) читает в WndProc И не просто читает а ОБРАБАТЫВАЕТ, т.е. делает запись в БД, конвертирует файл из одного формата в другой и т.п. И в варианте с SendMessage этот (Какой-то внутренний поток в C++) будет ждать пока VB6 это сообщение обработает При увеличении нагрузки время обработки увеличивается, и это возможно м.б. критично. (Какой-то внутренний поток в C++) м.б. Call_established, Call_released, Fax_Connected, Fax_Sent_OK. Т.е. проблема с SendMessage в том, что я заставляю процесс ЖДАТЬ ТАМ ГДЕ ЭТО НЕ НУЖНО ПО ЛОГИКЕ В случае с пулянием файлами поток просто скидывает файл на диск (это быстро), а VB6 пусть его обрабатывает хоть 2 часа. Ну, если только вот это. По идее нужно что-то другое вместо SendMessage, тут советовали. 13794617 13795624 но переделывать идеологию обмена, это не раз плюнуть. И подозреваю (по ощущениям) что ошибка не связана с механизмом COPY_DATA. Как вариант, воспроизвести тот же эксперимент с "пулянием файлами" на "старой версии" (ранее не делал). и посмотреть будет ли вылазить эта же ошибка. (запись файла точно не вносит задержки в поток) Но я боюсь что я не сумею воспроизвести ТАКУЮ ЖЕ интенсивность процессов, ведь пуляние файлами очень инертно. С пулянием файлами у меня 3 таймера по 1 сек (чтоб отослать задание и получить ответ). А здесь у меня 300мс + 500мс + WndProc (как только так сразу). А "3 таймера по 1 сек " по определению не позволят задействовать "мощности", меньше заданий в единицу времени стартуются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 19:41 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Т.е. проблема с SendMessage в том, что я заставляю процесс ЖДАТЬ ТАМ ГДЕ ЭТО НЕ НУЖНО ПО ЛОГИКЕ В случае с пулянием файлами поток просто скидывает файл на диск (это быстро), а VB6 пусть его обрабатывает хоть 2 часа. Ну, если только вот это. И подозреваю (по ощущениям) что ошибка не связана с механизмом COPY_DATA. Как вариант, воспроизвести тот же эксперимент с "пулянием файлами" на "старой версии" (ранее не делал). и посмотреть будет ли вылазить эта же ошибка. (запись файла точно не вносит задержки в поток) Но я боюсь что я не сумею воспроизвести ТАКУЮ ЖЕ интенсивность процессов, ведь пуляние файлами очень инертно. Да не. Воспроизвел то же самое с "пулянием файлами". Перенастроил 3 таймера по 100мс (2 в VB6 и один в C++ через {PThread::Sleep(100);...}) Куда уж меньше. Приложение с объемами в 30-50 линий справляется, с "пулялкой" не путается, все ж продумывал когда-то. т.е. та же интенсивность А ошибка вылазит (та же самая!!! как на картинке - с теми же цифрами). Если не закрывать crash-окно - работа продолжается. Ну, хотя бы могу сказать что новосделанный "механизм COPY_DATA" тут не причем(хотя соображение про "время ожидания ответа на SendMessage" меня не очень греет). Можно не грешить на это. Ошибка где-то в недрах Opal. Я в принципе согласен на "усыпить", только вот как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 21:12 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
А как сделать так чтоб прога по команде Start Debugger (в студии) запускалась также как и exe: Т.е. я поставил Linker -> General Output File C:\Program Files\Proga/proga.exe (вместо .\Release/proga.exe) Компилируется теперь туда где работает. Прога запускается, библиотеки видит. Но чего-то "стандартного для себя чего ей обычно надо" не видит (как если бы из своей директории). Такое ощущение что рабочая папка не та. Что ей еще не хватает? Хотя чесно не знаю что мне это даст Binary was not built with debug information. ... но попытаться то стоит.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2013, 23:44 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Короче кажется везет, дебаггер (2005) тыкает меня в единственное место кода причем в код самой dll (Opal). Т.е. насколько я понимаю, кто-то (с опозданием) пытается закрыть вызов - перевести Connection в phaseToSet=ReleasedPhase, а текущая phase уже пустая (вызов был прикрыт из другого места) и this* уже разрушено. И как быть (ЗАБИТЬ)? Надо наверно написать If phase отсутствует -> на выход функции Нет? Есть идеи? По хорошему посылать автору эту картинку с вопросом "как такое может быть"? Искать кто вызывает ф-цию? Это можно намудрить... Я думаю при включенном PTRACE оно б еще строчкой раньше вылетело, ГЫ...но в логе было бы пусто. Кстати, эти дебажьи картинки как-то в текст трансформируются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 01:24 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Попробовал Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. все равно вылетает и тыкает в строчку Код: plaintext 1. -вроде ж это в блоке try . Всего лишь хочу сделать Код: vbnet 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 03:44 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Я предложил вариант ЗАБИТЬ, т.е. проигнорировать, но вот как это сделать. Тоже достаточно сложно, практически никак. Идея в том, чтобы обрамить какие-то вызовы выше по стеку того места, где происходит ошибка, стеком SEH-исключений, и исключение игнорировать (я бы логировал лучше). Но для этого надо знать хотя бы, где это происходит и иметь этот код в своих руках, хотя бы тот, что его вызывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 12:16 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
MasterZivНо для этого надо знать хотя бы, где это происходит и иметь этот код в своих руках, хотя бы тот, что его вызывает. Код то в руках. Ты картинку выше видел (Debug 2005-й студии)? Я уткнулся в место ошибки (в коде). И я могу затупить ф-цию даже через try...catch (сделав например cout << value, где с value проблемы) -у меня это в итоге получилось вроде. Только код в этом случае идет дальше своим путем, и путь этот неверный, я тут же получаю ошибку в другом месте, причем не в Opal а уже в ptlib (более общие ф-ции), а там уже логику не отследишь вообще никак. А в случае НЕ-нажатия кнопки в crash-окне как было подмечено(видимо верно) один из потоков просто вылетает. А поток этот скорее всего уже и не нужен (this=Connection, суть вылетающего кода как раз сделать ему Released), поэтому все и работает, если crash-окно не трогать. А если я "пропускаю", то "больной" поток продолжает куролесить. Как то так. P.S. На автора надежды мало. Это старая версия Opal. Уже пытался, получил 2 письма, они вообще не по сути вопроса, он по ходу не врубился в описание проблемы. Надо как то самому учиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 17:20 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Ты картинку выше видел (Debug 2005-й студии)? Я уткнулся в место ошибки (в коде). Картинку не видел. Ну и что там видно ? Переменная phase не инициализирована. Инициализируй, если так всё просто , и всё будет ОК. Но сдаётся мне, что не всё будет так просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 17:34 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77И я могу затупить ф-цию даже через try...catch (сделав например cout << value, где с value проблемы) -у меня это в итоге получилось вроде. Только код в этом случае идет дальше своим путем, и путь этот неверный, Не пойдёт. SEH выкинет исключение, и стек раскрутится до ближайшего верхнего TRY/CATCH блока. Дмитрий77я тут же получаю ошибку в другом месте, причем не в Opal а уже в ptlib (более общие ф-ции), а там уже логику не отследишь вообще никак. Делай TRY/CATCH на самом верху логики работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 17:39 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
MasterZivSEH выкинет исключение, и стек раскрутится до ближайшего верхнего TRY/CATCH блока. И давно catch начал ловить SE вместо __except?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 17:44 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMasterZivSEH выкинет исключение, и стек раскрутится до ближайшего верхнего TRY/CATCH блока. И давно catch начал ловить SE вместо __except?.. Да не важно, все же поняли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 21:06 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
MasterZivНо сдаётся мне, что не всё будет так просто. Там не просто. Дебаг (опаловский) я включил, но он не много чего дает. При нормальном течении событий должно быть так: 2013/10/02 22:07:54.593 PSimpleThread: 13016 OpalCon SetPhase from ReleasingPhase to ReleasedPhase for Call[Ca2cc2b7619]-EP<fax>[F8745179d20] 2013/10/02 22:07:54.593 PSimpleThread: 13016 PTLib Thread ended: name="PSimpleThread:13016", real=0.109, kernel=0.016 (14.6%), user=0.000 (0%), both=0.016 (14.6%) Выполняется SetPhase (поток 13016), потом этот поток завершается (Thread ended). Все. Как он его завершает я понять не могу. При ненормальном течении событий ф-ция SetPhase (вызывается из OpalConnection::OnReleased) крашит: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. (если не мудрить, то дебаггер остановится на строчке, которая выделена красным -"this is the next statement that will be executed") Если смотреть в дебаггере в *this и в phase, то там везде будет CXX0030 Error: expession can not be evaluated. Т.е. *this по сути уже уничтожена на момент вызова. Что я хочу попробовать сделать (и думаю этого достаточно). 1) Остановить поток Код: plaintext 1. Для остановки потока этого достаточно. Если его не остановить, он понаделает делов. 2) Посмотреть логи и подумать/попробовать можно ли самозавершить поток (чтоб он не висел). Т.е. при возникновении ошибки надо что-то сделать. Вопрос: как все-таки правильно отловить ошибку . Я например делаю так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Он выкидывает меня на "красной строчке" после try catch. (желтая стрелочка в дебагере). Такое ощущение что задница с "CXX0030 Error: expession can not be evaluated" может наступить в любой момент. Т.е. на момент вызова еще не задница, а в момент выполнения уже задница, причем на любой строчке ф-ции. Т.е. как все-таки правильно отловить любое исключение в приведенной ф-ции? Ну, мне наверно пример кода нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 22:52 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77вызывается из OpalConnection::OnReleased А откуда вызывается этот самый OnReleased? Что-то у меня чувство, что он вызывается уже после освобождения объекта... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 23:02 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА откуда вызывается этот самый OnReleased? Там все очень запутано. Например отсюда. Но не исключено что еще откуда-то может. Код: 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. Dimitry SibiryakovЧто-то у меня чувство, что он вызывается уже после освобождения объекта... У меня тоже такое чувство. Думаю что он м.б. вызван дважды и трижды из разных мест, типа чтоб наверняка, а при перекрестной бомбежке при большой нагрузке и дефеците времени какое-то условие может провериться неправильно. Еще есть чувство что объект может освободиться в процессе выполнения OnReleased. (т.е. когда принималось решение вызвать OnReleased, с объектом было все в порядке, а в процессе работы с объектом объект был разбомблен извне). Т.е. я и хочу в SetPhase проверять что объект еще вменяем и если нет, то стопорить поток. Как проверять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 23:30 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Как проверять? Не надо ничего проверять, поставь synchronousOnRelease в true. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 23:38 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, >поставь synchronousOnRelease в true Откуда такая уверенность и в каком месте предлагаешь это сделать? Но боюсь такой подход породит другие проблемы в самом неожиданном месте. Или какой-то другой объект будет порушен раньше времени. М.б. все-таки проверить объект "на вменяемость" перед выполнением действа дающее краш? Чем моя идея плоха? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2013, 23:55 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
>поставь 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. Код: 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. Вот как мне проверить что 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. ну или Код: plaintext 1. 2. 3. 4. 5. 6. Проконтролировать код на предмет чтоб такой ситуации не было мне не по зубам (я на это и не претендую). Поэтому единственный вариант - заморозить и выкинуть поток, но при этом чтоб он не рванул приложение. Если задница, значит данный Connection уже не нужен, а полужив он только потому что из-под него запущена эта задница. Это неправильно конечно, но боюсь самый безобидный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 00:59 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77М.б. все-таки проверить объект "на вменяемость" перед выполнением действа дающее краш? Чем моя идея плоха? Тем, что она неосуществима. В принципе невозможно в общем случае проверить указатель на валидность. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 01:18 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Но вариантов то не много. Вот читаю (ответ #6) http://stackoverflow.com/questions/4595675/determining-whether-pointer-is-valid Подсунуть пустышку "#define DATA_MAGIC 0x12345678" в какой-то свой элемент при инициализации класса (OpalConnection) потом проверить равно ли значение пустышке? Если НЕТ, то задница. не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 01:28 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
MasterZivДелай TRY/CATCH на самом верху логики работы. Ну вот только это и помогло: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Что интересно, чтоб вылетало больше одного раза я в логе не нашел. Хотя я не уверен что я убиваю поток через ExitThread(13); -лог это не показывает. И не уверен что это надо - заснул и черт с ним. Код: plaintext 1. 2. 3. 4. 5. За считанные доли милисекунды объект 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 Не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 05:42 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, РОдной, пойми ты наконец, "CXX0030 Error: expession can not be evaluated" — это ошибка ДЕБАГЕРА во время отладки, а не программы во время выполнения. Хотя и вызваны они одной причиной — неверным адресом в указателе — это разные вещи. Это тебе не бейсик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 10:01 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДмитрий77М.б. все-таки проверить объект "на вменяемость" перед выполнением действа дающее краш? Чем моя идея плоха? Тем, что она неосуществима. В принципе невозможно в общем случае проверить указатель на валидность. Ну, на самом деле можно иногда.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 10:04 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Dimitry Sibiryakov, Но вариантов то не много. Вот читаю (ответ #6) http://stackoverflow.com/questions/4595675/determining-whether-pointer-is-valid Подсунуть пустышку "#define DATA_MAGIC 0x12345678" в какой-то свой элемент при инициализации класса (OpalConnection) потом проверить равно ли значение пустышке? Если НЕТ, то задница. не? Эта пустышка — ноль, нулевой указатель. Только проблема в том, что возможно тебе недоступно место инициализации (если доступно, то надо несомненно ее добавить), и что возможно указатель затирается левым значением, которое неотличимо от нормального. Есть ещё функция IsValidHeapPointer, ее можно иногда применять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 10:10 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
MasterZivЭта пустышка — ноль, нулевой указатель. Это бесполезно. Да, попытался, запихивается в инициализацию класса. Пустышка (и любой другой способ) пройдет проверку "на вшивость", а при выполнение следующей строчки объект "бабахнет". Где бабахнет, там и вылетет, проверки не помогут. Поэтому единственный вариант - стеречь вылет в ЛЮБОМ месте. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И ДА, это работает, наконец то! Поток кстати думаю (через задницу) но выходит, раз краш не вылазит в другом месте. Автор кстати еще написал: автор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 сильнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 10:59 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Чайники часто думают, что код, стоящий после создания потока, выполняется после кода созданного потока. Они заблуждаются. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 13:26 |
|
||
|
А реально ли найти ошибку глядя на this CXX0017: Error: simbol this not found
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Не знаю что там чайники думают, но я думаю что код выполняется параллельно (на то он и поток) и может вбабахать между строк основного кода. Собственно это и имело место быть (объект мог удалиться в любом месте выполнения ф-ции SetPhase). Слабое место был критерий locked -он мог не выполниться. Теперь видимо выполняется с гарантией. P.S. На VB6 телефонию нормально не напишешь. Как раз потому что с потоками там туго, не потому что язык тупой. PP.S А вот на VB.NET наверно вполне. PPP.S. Но мне честно хватает раскопок в имеющейся реализации, а основное время я лучше потрачу на "перделки и свистелки". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2013, 14:08 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019944]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 307ms |
| total: | 467ms |

| 0 / 0 |
