У меня есть многопоточная (pthreads) программа, в которой main () вызывает функцию omp_file_open_all () и передает строку как char * вместе с другими аргументами.Я что-то отлаживал с помощью gdb и увидел, что gdb не распечатывает строковое значение правильно, тогда как printf внутри функции выводит его правильно.
Breakpoint 1, omp_file_open_all (fd=0x423bb950, filename=0x7f605df078e0 "", mode=-16843009) at pthread_coll_file_open.c:29
29 if(omp_get_thread_num() == MASTER)
(gdb) print filename
$1 = 0x7f605df078e0 ""
Так что GDB показывает имя файла какпусто, тогда как printf внутри функции выводит правильное значение как "/tmp/test.out".Вызываемая функция (omp_file_open_all) определяется следующим образом (не в том же файле, что и main () ): int omp_file_open_all (int fd, char* filename, int mode);
Я не могу опубликовать свою программу здесьтак как это часть большего кода, это ок.1500 строк кода.'filename' - это глобальная переменная, которая устанавливается в main () основным потоком до появления новых потоков.
Так что это не ошибка, и я просто наткнулся на нее, но мне интересно найтипочему GDB не отображает правильное значение.
ОС: 64-битная версия OpenSUSE, GDB 6,8
Спасибо за помощь.