GDB и NS2: как остановить программу при вызове некоторой функции

Я использую GDB для отладки NS-2, который является симулятором для сетевых протоколов. Он принимает файл .tcl в качестве входных данных и интерпретирует его. [Я думаю, что это переводчик.]

Часть кода написана на tcl (события и создание сетевых компонентов), а часть на C ++ (особенно форматы пакетов, агенты и т. Д.).

Я создал агент в C ++ и хочу остановить его при вызове некоторой функции, чтобы я мог видеть трассировку стека и определять, какие другие классы были вызваны до него.

Вот что я сделал:

Произошла какая-то ошибка в одной из моих функций MyAgent ::, и она выдавала ошибку сегментации, и GDB автоматически останавливался там. Я мог тогда видеть след стека. Я исправил ошибку.

Теперь, когда я бегу

   gdb ./ns
b MyAgent::function()
/*
When i press TAB after writing "b MyA" it gives me all functions
of my class :). when i press enter after above command --
it asks me "Breakpoint on future shared library load" and i say Yes.
I hope this is ok ??
*/
r myfiles/myWireless.tcl

Теперь он работает и не останавливается нигде. 🙁

Я уверен, что эта функция вызывается, потому что когда произошла ошибка сегментации, она остановилась на этой функции.

Спасибо

0

Решение

Вы можете добавить точку останова в этой функции:

(gdb) break MyAgent :: function ()

Вы должны убедиться, что скомпилированы с любыми опциями, необходимыми для получения отладочных символов. На GCC используйте -g или же -ggdb опции.

1

Другие решения

Вам нужно -args возможность указать tcl сценарий, который будет выполнен.

Бежать gdb как это:

gdb -args ./ns  path/to/tcl/script.tcl

Чтобы включить флаг отладки для кода C ++, если это еще не сделано, переконфигурируйте установку ns2 с помощью:

./configure --enable-debug     ;# plus any other flags you use for configuring
make clean
make -j 3                    ;# -j for faster compiling
make install                   ;# optional

Вы также можете использовать --with-tcldebug=..., для отладки кода tcl (для этой опции сначала нужно установить tcldebug)

0

По вопросам рекламы [email protected]