2013-08-28 5 views
0

Я пытаюсь demangle мои ошибки, такие как соединительныеD инструмент ddemangle.d не меняет выход из ДМД + GNU Л.Д. ссылки Ошибки

dmd -debug -gc -unittest -D -Dd/home/per/.emacs.d/auto-builds/dmd/Debug-Boundscheck-Unittest/home/per/Work/cognia/ -w ~/Work/cognia/t_geometry.d -of/home/per/.emacs.d/auto-builds/dmd/Debug-Boundscheck-Unittest/home/per/Work/cognia/t_geometry 
/home/per/.emacs.d/auto-builds/dmd/Debug-Boundscheck-Unittest/home/per/Work/cognia/t_geometry.o:(.data+0x6d8): undefined reference to `_D4gl3n6linalg12__ModuleInfoZ' 
/home/per/.emacs.d/auto-builds/dmd/Debug-Boundscheck-Unittest/home/per/Work/cognia/t_geometry.o: In function `_D4gl3n6linalg16__T6VectorTfVi4Z6Vector19__unittestL103_7189FNaNbNfZv': 
/home/per/Work/cognia/gl3n/linalg.d:104: undefined reference to `_D4gl3n6linalg15__unittest_failFiZv' 
/home/per/Work/cognia/gl3n/linalg.d:105: undefined reference to `_D4gl3n6linalg15__unittest_failFiZv' 

с помощью ddemangle.d из dtools репо на GitHub, как

same_command_as_above | ddemangle 

, но я получаю тот же результат, используя как DMD 2.063.2, так и git master.

Является ли ddemangle.d не uptodate?

Обновление: Хорошо. Благодаря!

same_command_as_above 2>&1 | ddemangle 

demangles большинство сообщений, но не все из них. Интересно, почему. Вот некоторые строки

/home/per/Work/cognia/gl3n/linalg.d:1814: undefined reference to `void gl3n.linalg.__unittest_fail(int)' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi2Vi2Z6Matrix6__initZ' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi2Vi2Z6Matrix6__initZ' 
/home/per/Work/cognia/gl3n/linalg.d:1815: undefined reference to `void gl3n.linalg.__unittest_fail(int)' 

Удовлетворительно ли кто-нибудь?

ответ

1

Убедитесь, что вы фильтруете выходной поток, который программа испускает. Ошибки обычно записываются в стандартный поток ошибок, но вышеприведенная строка только фильтрует стандартный выходной поток.

Попробуйте изменить команду:

same_command_as_above 2>&1 | ddemangle 

2>&1 будет перенаправлять поток ошибок на стандартный вывод, что позволяет ddemangle фильтровать как стандартный вывод и стандартный поток ошибок.

0

Ok. Благодаря!

same_command_as_above 2>&1 | ddemangle 

demangles большинство сообщений, но не все из них. Интересно, почему. Вот некоторые строки

/home/per/Work/cognia/gl3n/linalg.d:1814: undefined reference to `void gl3n.linalg.__unittest_fail(int)' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi2Vi2Z6Matrix6__initZ' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi2Vi2Z6Matrix6__initZ' 
/home/per/Work/cognia/gl3n/linalg.d:1815: undefined reference to `void gl3n.linalg.__unittest_fail(int)' 
/home/per/Work/cognia/gl3n/linalg.d:1817: undefined reference to `void gl3n.linalg.__unittest_fail(int)' 
/home/per/Work/cognia/gl3n/linalg.d:1818: undefined reference to `void gl3n.linalg.__unittest_fail(int)' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi4Vi4Z6Matrix6__initZ' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi4Vi4Z6Matrix6__initZ' 
/home/per/Work/cognia/gl3n/linalg.d:1820: undefined reference to `void gl3n.linalg.__unittest_fail(int)' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi4Vi4Z6Matrix6__initZ' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi4Vi4Z6Matrix6__initZ' 
/home/per/Work/cognia/gl3n/linalg.d:1821: undefined reference to `void gl3n.linalg.__unittest_fail(int)' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi4Vi4Z6Matrix6__initZ' 
/home/per/Work/cognia/gl3n/linalg.d:1823: undefined reference to `void gl3n.linalg.__unittest_fail(int)' 
/home/per/Work/cognia/gl3n/linalg.d:695: undefined reference to `_D4gl3n6linalg19__T6MatrixTfVi4Vi4Z6Matrix6__initZ' 

Подключитесь к кому-нибудь?

+1

Символы '__initZ' содержат значение по умолчанию для типа (которое используется для инициализации новых значений). В языке это соответствует неявному свойству '.init' всех типов. Они в настоящее время не развязаны - см. [Ошибка 10189] (http://d.puremagic.com/issues/show_bug.cgi?id=10189). –

+0

BTW, в будущем вы должны публиковать поправки к своему вопросу, редактируя свой вопрос и оставляя комментарий к ответу, который вы выполняете. –