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_
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.