LINUX.ORG.RU

GDB + assert.


0

0
Типичная ситуация. Еслть программа в теле которой очень много самопальных assert-ов ( ну например, MY_ASSERT )

Вид MY_ASSERT примерно такой

#define MY_ASSERT(X) { \

if (!(X)) { ... cerr<<"fuck!"<<endl; cerr.flush(); exit(code); ... } \

}

Иногда возникает задача посмотреть отладчиком причину возникновения assert-а, поковырятся в стеке и т.д. Однако после вызова exit(...) уже ничего этого не остается.

ВОПРОС:

как ПРАВИЛЬНО ( понятно что можно делать через "div by zero" и "seg fault" ) делать остановку программы, чтобы сохранился стек вызовов процедур и можно было посмотреть прогу отладчиком в момент срабатывания assert ?

anonymous
ню можно сделать функцию, а не макрос:

void ASSERT(int cond) __attribute__((noinline));
..........

и ставить в нее бряк
jek_
()
Ответ на: комментарий от jek_
можно. но нужели не предусмотрен стандартный вариант для такого случая ? а то вставлять каждый раз брейк запаришься
anonymous
()
Ответ на: комментарий от anonymous
гм, ну стандартный assert - тоже макрос, так что вряд ли где-то есть
на него заточка. а вообще-то можно просто прописать в init-файле gdb:
"b ASSERT"
и все дела.
только я не помню, как там с этими файлами нужно работать, так что -
read manuals...
jek_
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.