2013-11-15 2 views
3

цепочек вызовов с помощью MinGW GDB версии 7.6, получите много цепочек вызовов, как это:GDB Windows ??? в

(gdb) bt 
#0 0x000000007703d256 in ntdll!RtlEnterCriticalSection() 
    from C:\Windows\SYSTEM32\ntdll.dll 
#1 0x0000000000000000 in ??() 

что не совсем полезно.

Почему это? Есть ли способ получить что-нибудь более полезное? Абсолютно больно пытаться выяснить, что делает сложная многопоточная программа, когда произошла ошибка, когда это - это обратная трассировка, которую я получаю.

+0

У вас включен режим без остановки gdb? theres хороший многопоточный пример отладки с gdb [здесь] (http://blogs.adobe.com/flascc/2012/11/09/debugging-multi-threaded-flascc-applications-with-gdb/) – amdixon

+0

Является ли это 32 или 64, а также для ОС? Кроме того, поскольку стек включает вызов 'ntdll', можно с уверенностью сказать, что это часть системного вызова. Зная, что я знаю о вызовах ядра, затрагивающих исключения .NET, я не удивлюсь, если что-то подобное здесь повлияет на обратную трассировку. –

+0

64-разрядная версия приложения/64-разрядная ОС. –

ответ

0

Причина может заключаться в том, что gdb имеет понятие «текущей» нити, которая выбрана IMHO довольно случайным образом.

Вы можете видеть, какие темы выполняет ваша программа в настоящий момент, выдав команду gdb info threads. Включите «текущую» резьбу на thread <num>. Попытайтесь снова получить осмысленную обратную трассировку.

быть также уверен, что

  • исполняемые скомпилирован с отладочной информацией (-g)
  • , что GDB способен справиться с форматом, используемым для кодирования отладочной информации в исполняемый. Возможно, вам захочется проверить, может ли gdb установить точку останова на `main() 'и вести себя разумно там.
2

Я бег в ту же проблему, используя MinGW 64. Используя компилятор переключается -g3 -OG наконец показал всю трассировку красиво.

Смежные вопросы