Определение точки выхода из приложения. C ++ / Linux - PullRequest
2 голосов
/ 19 апреля 2009

Я работаю над большим приложением (ns2), и где-то кто-то добавил туда выход (1) без каких-либо отладочных или печатных операторов, и он выполняется. Я не хочу вручную проверять каждый файл, который вызывает exit, чтобы выяснить, почему программа завершается. Можно ли определить, где находится программа? Это работает в Linux и написано на C ++. Можно ли сделать что-то подобное в GDB?

Ответы [ 3 ]

8 голосов
/ 19 апреля 2009

Конечно. Поставьте точку останова в начале выхода (3). Когда он сломается, посмотрите на стек.

Второй вариант, запустите его под truss (1) (я уверен, что есть версия фермы для Linux.)

или strace (1) .

Обновление

На самом деле, я столкнулся с другим методом в другом вопросе: вот ссылка .

3 голосов
/ 19 апреля 2009

Если вы предоставите собственную реализацию exit(), то она будет использоваться вместо той, что в библиотеке. Постройте это, загрузите его в отладчик, установите точку останова на exit(), запустите программу и посмотрите, откуда она взялась.

Или, как говорит Чарли , просто установите точку останова для библиотеки exit(). Используйте описанный выше метод, если хотите вместо этого запустить какой-то другой конкретный бит кода.

0 голосов
/ 19 апреля 2009

Поскольку у вас, похоже, есть доступ к исходному коду, я просто искал вызов для выхода и проанализировал код. Тогда вы, скорее всего, также можете это исправить, заменив выход на что-то более подходящее.

Если весь ваш код находится в каталоге src a

grep -r exit src

должен найти все вхождения слова exit

Если у вас нет доступа к коду, воспользуйтесь предложением (ями) Чарли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...