Я скомпилировал исполняемый файл sourceforge tcl, он прошел все поставленные тесты и работает с тем же segfault, который я вижу в загруженном исполняемом файле, 8.6.9. Я работаю на Ubuntu 16.04 (по старым причинам) на процессоре AMD. (Я запустил Ubuntu 18.04 на моем ноутбуке, у него такой же сбой.)
Итак, затем я перекомпилировал с включенным параметром --enable-symbols = mem, чтобы посмотреть, не вызывает ли утечка памяти ошибку segfault, и теперь она сразу завершается с помощью:
Trying to decr ref count of Tcl_Obj allocated in another thread
./runMeg.sh: line 3: 29972 Aborted (core dumped) ../source/main_megatron.
Я не вижу ответа о том, что делать с этим ответом, может кто-нибудь посоветовать, что это означает, что мне нужно исправить?
Все мои темы имеют вид:
set graphDisplayThread [ thread::create {
after [expr {int(1000) }]
.....
puts "...Initialized graphDisplayUpdate_02 ID $c update."
thread::wait
}]
и:
thread::send $::graphDisplayThread {
incr b
graphDisplayUpdate .c
}
Все общие переменные ссылаются ПОСЛЕ захвата мьютекса и через переменные TSV. В приложении 5 потоков, в которых вообще нет C-кода. Всего около 2000 строк кода.
Приложение запускает тысячи циклов, а затем выполняет ошибки в случайных точках с предварительно скомпилированной версией ActiveState 8.6.9. Итак, теперь я пытаюсь изолировать точку отказа с помощью скомпилированных проверок памяти SourceForge 8.6.9 в качестве первого шага, но проблема, с которой я столкнулся выше, является первой, с которой я сталкиваюсь - и это происходит сразу после запуска.
Обновление (16.05.198, 8:28 EST): новая деталь для ответа на комментарии ниже .... В этом приложении нет C-кода, и ошибка Tcl_Obj ТОЛЬКО появляется в sourceForge на основе, 8.6. 9 компиляций (2) Я сделал сам, а не предустановленную загрузку ActiveState 8.6.9. И ошибка в коде sourceForge возникает как в сборках-близнецах "MEM_DEBUG", так и в сборках NO- "MEM_DEBUG", которые я сделал в тандеме и протестировал. Оба прошли все установочные тесты.
Подведем итог:
sourceForge 8.6.9 compile w/MEM_DEBUG option: Tcl_Obj Abort error
sourceForge 8.6.9 compile w/o MEM_DEBUG option: Tcl_Obj Abort error
ActiveState 8.6.9 build: does not Abort, random seg fault
Почему я должен доверять сборке sourceForge, которую я сделал сам, больше, чем готовому исполняемому файлу ActiveState, который не представляет проблемы? И если мы действительно доверяем скомпилированной версии sourceForge, как я могу изолировать, где ошибка TclObject создается нарушающим кодом TCL?
Обновление 5/16/19 @ 13: 34EST: та же ошибка возникает с ActiveState 8.6.9 в Ubuntu 18.04. Я еще не проверил мои сборки SourceForge, чтобы посмотреть, как они себя ведут.