GDB с потоками - PullRequest
       46

GDB с потоками

1 голос
/ 29 сентября 2011

У меня есть программа на C, в которой функция main создает потоки, и мне нужно отладить один поток.Я использую GDB для него же.Однако я не могу «ломать» или «смотреть» переменные на определенных C-файлах этой программы.Например,Мой поток 6 запрограммирован и использует определенные C-файлы, и мне приходится прерывать строку 601, скажем, call_connect.c.Это не возможно?Если я попытаюсь, это то, что происходит:

(gdb) info threads
  6 Thread 0xb5c96b70 (LWP 3608)  0xb7fe1424 in __kernel_vsyscall ()
  5 Thread 0xb6497b70 (LWP 3607)  0xb7fe1424 in __kernel_vsyscall ()
  4 Thread 0xb6c98b70 (LWP 3606)  0xb7fe1424 in __kernel_vsyscall ()
  3 Thread 0xb7499b70 (LWP 3605)  0xb7fe1424 in __kernel_vsyscall ()
  2 Thread 0xb7c9ab70 (LWP 3604)  0xb7fe1424 in __kernel_vsyscall ()
* 1 Thread 0xb7c9b6c0 (LWP 3603)  0x0804a178 in main ()

(gdb) break 601 thread 6
No line 601 in file "events.c".

(gdb) break call_connect.c:601 thread 6
No source file named call_connect.c.

Также я отлаживал свой код C с помощью -O0 -ggdb и все еще не могу наблюдать за переменными.Это то, что я получаю, когда пытаюсь прочитать переменную char * ptext .

(gdb) print ptext
No symbol "ptext" in current context.
(gdb) watch ptext
No symbol "ptext" in current context.

Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

Хотя я не широко использовал gdb с pthreads, но у меня есть несколько указателей, которые вы можете попробовать.

  1. Вы можете переключиться на поток, который хотите отлаживать, используя thread threadnum, где threadnum - это идентификатор (первый столбец), отображаемый через info threads.

  2. Проверьте исходные каталоги, которые ищутся для команды file usinf show directories.Если каталог, в котором находится ваш источник, отсутствует в списке, добавьте его с помощью команды directory <path_to_source>

  3. При настройке точек останова или просмотра используйте автоматическое завершение (обычно <Tab>) для поиска точек останова.и часы, которые вы можете установить.

Пожалуйста, проверьте ссылки в разделе Thread Debugging в YoLinux pthreads Tutorials для получения более подробной информации.

Надеюсь, это поможет!

0 голосов
/ 30 сентября 2011

Ваша проблема в том, что ваша программа скомпилирована без отладочной информации.

Наиболее вероятные причины: либо call_connect.c был скомпилирован без флага -ggdb, несмотря на то, что вы заявили (проверьте ваш журнал сборки, чтобы убедиться в этом), либо у вас есть "заблудившееся" -s в строке ссылок (которое лишит исполняемый файл).

...