2014-01-27 2 views
1

Редактировать: ok, я не откажусь.отладка stl-контейнеров с использованием mingw, проблема с скриптом python

я попытался установить это в CodeBlocks, но это не работает хорошо либо:

Starting debugger: C:\MinGW\bin\gdb-python27.exe -nx -fullname -quiet 
done 
Setting breakpoints 
Attaching to program with pid: 7760 
Debugger name and version: GNU gdb (GDB) 7.5 
Attaching to process 7760 
> source C:\MinGW\bin\.gdbinit 
Traceback (most recent call last): 
    File "<string>", line 5, in <module> 
    File "C:\MinGW\share\gcc-4.8.1\python\libstdcxx\v6\printers.py", line 917, in register_libstdcxx_printers 
    register_type_printers(obj) 
    File "C:\MinGW\share\gcc-4.8.1\python\libstdcxx\v6\printers.py", line 855, in register_type_printers 
    add_one_type_printer(obj, 'basic_string', pfx + 'string') 
    File "C:\MinGW\share\gcc-4.8.1\python\libstdcxx\v6\printers.py", line 846, in add_one_type_printer 
    gdb.types.register_type_printer(obj, printer) 
    File "c:\mingw\share\gdb/python\gdb\types.py", line 179, in register_type_printer 
    locus.type_printers.insert(0, printer) 
AttributeError: 'module' object has no attribute 'type_printers' 
C:\MinGW\bin\.gdbinit:7: Error in sourced command file: 
Error while executing Python code. 
Error while executing Python code. 
> python print sys.version 
2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] 
> show version 
GNU gdb (GDB) 7.5 
Copyright (C) 2012 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "i686-pc-mingw32". 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>. 
Debugger name and version: GNU gdb (GDB) 7.5 

так это выглядит, как будто это не имеет ничего общего с затмение Мессинг вещи, но сценарий плохо себя.


редактировать: я просто загорелся MSYS, переходите на тот же путь затмения suposedly делает (2-среда-сd D:/работа/Ludum-смели/Debug), установить те же параметры (за исключением 5- enable-pretty-printing, поскольку gdb-python, похоже, не знает этого параметра) и, наконец, получил источник .gdbinit. Он даже не вздрогнул от этого. никаких ошибок вообще.

Кто-нибудь знает, как узнать, что затмение пытается запустить, когда я нажимаю на отладку?

Также я просто попробовал «стандартную процедуру создания процесса», которая сначала прошла гладко, но прокручивалась в консоли трасс, я видел, как она просто пропускает ошибки, встречающиеся в файле python.


редактировать: я просто понял, что не устанавливая 5-включения-довольно-печати оленьей кожи набор _use_gdb_pp в printers.py, поэтому он не будет работать точно так же, как и в затмении, так или иначе.

Я думаю, довольно печать сломана MinGW + Eclipse CDT


после выполнения этих шагов: https://stackoverflow.com/a/14266862/3239702 я столкнулся следующий вывод в затмении:

610,711 2-environment-cd D:/work/ludum-dare/Debug 
610,715 2^done 
610,715 (gdb) 
610,716 3-gdb-set breakpoint pending on 
610,725 3^done 
610,725 (gdb) 
610,726 4-gdb-set detach-on-fork on 
610,735 4^done 
610,735 (gdb) 
610,736 5-enable-pretty-printing 
610,745 5^done 
610,745 (gdb) 
610,746 6-gdb-set python print-stack none 
610,755 6^done 
610,755 (gdb) 
610,756 7-gdb-set print object on 
610,765 7^done 
610,765 (gdb) 
610,766 8-gdb-set print sevenbit-strings on 
610,775 8^done 
610,775 (gdb) 
610,776 9-gdb-set host-charset UTF-8 
610,785 9^done 
610,785 (gdb) 
610,786 10-gdb-set target-charset WINDOWS-1252 
610,795 10^done 
610,795 (gdb) 
610,795 11-gdb-set target-wide-charset UTF-16 
610,805 11^done 
610,805 (gdb) 
610,822 12source D:\work\ludum-dare\.gdbinit 
610,825 &"source D:\\work\\ludum-dare\\.gdbinit\n" 
610,896 &"Traceback (most recent call last):\n" 
610,896 &" File \"<string>\", line 4, in <module>\n" 
610,896 &" File \"C:/MinGW/share/gcc-4.8.1/python\\libstdcxx\\v6\\printers.py\", line 917, in regis\ 
ter_libstdcxx_printers\n" 
610,915 &" register_type_printers(obj)\n" 
610,915 &" File \"C:/MinGW/share/gcc-4.8.1/python\\libstdcxx\\v6\\printers.py\", line 855, in regis\ 
ter_type_printers\n" 
610,917 &" add_one_type_printer(obj, 'basic_string', pfx + 'string')\n" 
610,917 &" File \"C:/MinGW/share/gcc-4.8.1/python\\libstdcxx\\v6\\printers.py\", line 846, in add_o\ 
ne_type_printer\n" 
610,918 &" gdb.types.register_type_printer(obj, printer)\n" 
610,918 &" File \"c:\\mingw\\share\\gdb/python\\gdb\\types.py\", line 176, in register_type_printer\ 
\n" 
610,928 &" locus.type_printers.insert(0, printer)\n" 
610,928 &"AttributeError: 'module' object has no attribute 'type_printers'\n" 
610,928 &"D:\\work\\ludum-dare\\.gdbinit:6: Error in sourced command file:\n" 
610,928 &"Error while executing Python code.\n" 
610,928 12^error,msg="D:\\work\\ludum-dare\\.gdbinit:6: Error in sourced command file:\nError while \ 
executing Python code." 
610,929 (gdb) 

Я искал в Интернете для других людей, у которых есть эта проблема, но похоже, что я получил джек-пот. я получил: Eclipse IDE для разработчиков C/C++

Версия: Kepler Service Release 1 Сложение ID: 20130919-0819


мой MinGW инсталлятор все обновляется, и GDB-python27 устанавливается с:

gdb-python-7.5.1-mingw32-bin.tar.lzma 

питон 2.7.6 32bit Пользовательские переменные среды:

PYTHONHOME = C:\Python27 
PYTHONPATH = C:\Python27\Lib 
PATH = c:\mingw\bin 

Глобальные переменные среды: содержит гораздо больше, я только вывесить соответствующую часть:

PATH = C:\Python27\; 

редактировать: я просто попытался сценарии питона из SVN (SVN: //gcc.gnu.org/svn/gcc/trunk/libstdC++ - v3/python), конечно, я изменил путь в моем .gdbinit соответственно. вывод в консоли «gdb traces» в основном одинаков, за исключением нескольких номеров строк, которые отличаются, но ошибки в этих строках идентичны, поэтому я полагаю, что только что был рефакторинг или что-то в этом роде.

, а также мой файл .gdbinit, как сейчас. перед Svn кассе, комментируемого линия использовали вместо линии 4:

python 
import sys 
# sys.path.insert(0, 'C:/MinGW/share/gcc-4.8.1/python') 
sys.path.insert(0, 'D:/work/libstdc++-v3/python') 
from libstdcxx.v6.printers import register_libstdcxx_printers 
register_libstdcxx_printers (None) 
end 

редактировать: пытался отладить, что printers.py сценарий: я добавил некоторые отпечатки функции register_libstdcxx_printers:

def register_libstdcxx_printers (obj): 
    "Register libstdc++ pretty-printers with objfile Obj." 
    global _use_gdb_pp 
    global libstdcxx_printer 
    print("initialy obj: " + str(obj)) 
    print("_use_gdb_pp: " + str(_use_gdb_pp)) 
    if _use_gdb_pp: 
     gdb.printing.register_pretty_printer(obj, libstdcxx_printer) 
    else: 
     if obj is None: 
      obj = gdb 
     obj.pretty_printers.append(libstdcxx_printer) 
    print("after gdb.printing.register_pretty_printer(obj, libstdcxx_printer): obj: " + str(obj)) 
    register_type_printers(obj) 

выход это:

559,740 ~"initialy obj: None\n" 
559,740 ~"_use_gdb_pp: True\n" 
559,740 ~"after gdb.printing.register_pretty_printer(obj, libstdcxx_printer): obj: None\n" 

Я не могу на самом деле обвинить его, чтобы не найти атрибут 'type_printers' на None, теперь я могу? я полагаю, что никто не приходит от линии 6 в моем .gdbinit:

register_libstdcxx_printers (None) 
+0

Как ваша переменная PATH? У меня были проблемы с python 3.3 (почти так же, как и у вас), поэтому я заставил 2.7.x. –

+0

Я отредактировал вопрос еще. устанавливает ли python33 что-то в реестр? i.e должен ли я удалить python33? – mlatu

+0

Я не знаю о регистрации, но вам не нужно его удалять. Отредактируйте переменную PATH, поместив каталог Python 2.7.x перед Python 3.3.x. Поэтому, когда вы вводите 'python' в CMD, вы должны иметь python 2.7.x. PS. Вы уверены, что вы заставляете Eclipse находить '.gdbinit' и что ваш отладчик' mingw32-gdb-python'? Я написал сообщение в блоге (http://wesleymesquita.com/blog/?p=147), которое может помочь. –

ответ

2

MinGW GDB 7.5.1 использует скрипты на Python от обычного GDB 7.6. Поэтому скрипты терпят неудачу.

После того как я скопировал и системные вызовы питона папки из

http://ftp.gnu.org/gnu/gdb/gdb-7.5.1.tar.gz

и снова попробовал все, что каким-то чудом работал.

Starting debugger: C:\MinGW\bin\gdb-python27.exe -nx -fullname -quiet 
done 
Setting breakpoints 
Attaching to program with pid: 7428 
Debugger name and version: GNU gdb (GDB) 7.5 
Attaching to process 7428 
Continuing... 
At D:\work\ludum-dare\src\main.cpp:39 
Continuing... 
At D:\work\ludum-dare\src\main.cpp:41 
Continuing... 
At D:\work\ludum-dare\src\componentEntitySystem\componentEntitySystem.cpp:393 
> print funcText 
$1 = {static npos = <optimized out>, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x24504f4 "'ces:getEntitiesWithComponent(\"position\")'"}} 
> source C:\MingW\bin\.gdbinit 
> print funcText 
$2 = "'ces:getEntitiesWithComponent(\"position\")'" 

Так, «хорошая работа» к человеку, который поставил в GdB сценарии 7,6 питона в 7.5.1 пакет MinGW GDB. НЕ.

+0

Как только я получил это неправильно в первый раз, небольшое разъяснение: Замените '.. \ MinGW \ share \ gdb \ {python | syscalls}' на '.. \ gdb-7.5.1 \ gdb \ {python | syscalls} ', но оставьте' .. \ MinGW \ share \ gcc-4.8.1 \ python \ libstdcxx \ .. 'без изменений. – mbschenkel

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