LINUX.ORG.RU

Debug_new, dmalloc не получается собрать.


0

1

Вставляю в main.cpp проекта один из заголовков данных детектоутечек в итоге не могу собрать проект. Ошибки примерно следующие:

#include "DebugNew.h"
#define DEBUG_NEW new(THIS_FILE, __LINE__)

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/new:93:16: ошибка: декларация ‘operator new’ как не-функции
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/new:94:16: ошибка: декларация ‘operator new’ как не-функции
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/new:95:35: ошибка: декларация ‘void operator delete(void*) throw ()’ задает другие исключительные ситуации
headers/DebugNew.h:25:7: ошибка: предыдущая декларация ‘void operator delete(void*)’
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/new:96:37: ошибка: декларация ‘void operator delete [](void*) throw ()’ задает другие исключительные ситуации
headers/DebugNew.h:28:7: ошибка: предыдущая декларация ‘void operator delete [](void*)’
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/new:97:16: ошибка: декларация ‘operator new’ как не-функции
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/new:98:16: ошибка: декларация ‘operator new’ как не-функции
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/new:103:23: ошибка: декларация ‘operator new’ как не-функции
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/new:104:23: ошибка: декларация ‘operator new’ как не-функции
In file included from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/i486-slackware-linux/bits/c++allocator.h:34:0,
In file included from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/i486-slackware-linux/bits/c++allocator.h:34:0,
                 from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/allocator.h:48,
                 from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/string:43,
                 from src/Main.cpp:5:
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h: В функции-члене ‘_Tp* __gnu_cxx::new_allocator<_Tp>::allocate(__gnu_cxx::new_allocator::size_type, const void*)’:
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h:89:38: ошибка: нет соответствующей функции для вызова ‘operator new(const char [90], int)’
<built-in>:0:0: замечание: претенденты: void* operator new(unsigned int)
headers/DebugNew.h:23:7: замечание:              void* operator new(size_t, const char*, int)
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h: В функции-члене ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&)’:
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h:105:15: ошибка: expected type-specifier before ‘(’ token
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h:105:15: ошибка: expected ‘)’ before ‘(’ token
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h:105:16: ошибка: expected primary-expression before ‘void’
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h:105:23: ошибка: expected ‘;’ before ‘__p’
In file included from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/string:56:0,
                 from src/Main.cpp:5:
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/basic_string.tcc: In static member function ‘static std::basic_string<_CharT, _Traits, _Alloc>::_Rep* std::basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_create(std::basic_string<_CharT, _Traits, _Alloc>::size_type, std::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&)’:
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/basic_string.tcc:608:24: ошибка: expected type-specifier before ‘__place’
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/basic_string.tcc:608:24: ошибка: expected ‘)’ before ‘__place’
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/basic_string.tcc:608:24: ошибка: expected ‘,’ or ‘;’ before ‘__place’
In file included from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/vector:63:0,
                 from headers/utils/utils.hpp:3,
                 from src/Main.cpp:10:
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/stl_construct.h: В функции ‘void std::_Construct(_T1*, const _T2&)’:
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/stl_construct.h:80:13: ошибка: expected type-specifier before ‘static_cast’
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/stl_construct.h:80:13: ошибка: expected ‘)’ before ‘static_cast’
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/stl_construct.h:80:13: ошибка: expected ‘;’ before ‘static_cast’
In file included from headers/protocol/MessageBody.hpp:4:0,
                 from headers/protocol/MessageConverter.hpp:6,
                 from headers/protocol/Client.hpp:13,
                 from headers/protocol/Server.hpp:10,
                 from headers/SystemManager.hpp:5,
                 from src/Main.cpp:11:
/usr/include/stdlib.h: At global scope:
/usr/include/stdlib.h:471:14: ошибка: ‘void* debug_malloc’ redeclared as different kind of symbol
headers/DebugNew.h:21:7: ошибка: previous declaration of ‘void* debug_malloc(size_t, const char*, int)’
/usr/include/stdlib.h:471:14: ошибка: expected primary-expression before ‘__size’
/usr/include/stdlib.h:471:14: ошибка: expected ‘)’ before ‘__size’
/usr/include/stdlib.h:488:13: ошибка: переменная или поле ‘debug_free’ объявлено void
/usr/include/stdlib.h:488:13: ошибка: expected primary-expression before ‘void’
/usr/include/stdlib.h:488:13: ошибка: expected ‘)’ before ‘void’
In file included from headers/protocol/MessageConverter.hpp:6:0,
                 from headers/protocol/Client.hpp:13,
                 from headers/protocol/Server.hpp:10,
                 from headers/SystemManager.hpp:5,
                 from src/Main.cpp:11:
headers/protocol/MessageBody.hpp:87:2: предупреждение: ‘typedef’ в этой декларации отброшен
headers/protocol/MessageBody.hpp:137:2: предупреждение: ‘typedef’ в этой декларации отброшен
headers/protocol/MessageBody.hpp:218:2: предупреждение: ‘typedef’ в этой декларации отброшен

★★★★★

Ответ на: комментарий от i-rinat

пробовал, результат тоот же, вообще складывается ощущение что все эти dmalloc, debug_new и прочее подходят для нахождения утечек в проектах уровня helloworld, для кроссплатформенных клиент-серверных вещей применить их как то не получается.

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

А как насчёт использования libgc? Авторы пишут, что можно использовать как детектор утечек. Или забить и оставить управление памятью на сборщик мусора.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

в основном кросс-приложения это C,C++ как там может быть сборщик мусора? знаю есть библиотеки позволяющие реализовать это но вряд ли их можно кросскомпилировать под ARM. Та реализация которая ко мне поступила сделана на ucLibc, так что libdc не катит.

splinter ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

спасибо завтра попробую, хотя в результат уже и не верится.

splinter ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.