Программа работает с GDB, но не работает с ./ProgramName - PullRequest
1 голос
/ 18 июля 2010

Я пишу редактор в 64-битном режиме сборки в Linux. Он работает правильно, когда я отлаживаю программу в GDB, но он не работает правильно, когда я запускаю его нормально, это означает, что при использовании ./programName возникают ошибки во время выполнения.

Ответы [ 2 ]

2 голосов
/ 18 июля 2010

Возможно, вы обращаетесь к неинициализированным данным или у вас проблема с повреждением памяти.Это объясняет, что программа ведет себя по-разному при запуске в отладчике - вы видите результаты неопределенного поведения.

Запустите вашу программу с помощью инструмента memcheck valgrind и посмотрите, что она выводит.Valgrind - это мощный инструмент, который выявляет множество ошибок во время выполнения в Linux, в том числе полный трассировку стека до ошибки.

0 голосов
/ 23 декабря 2018

Если GDB отключает ASLR, это то, что заставляет его работать, возможно, set disable-randomization off в GDB позволит вам воспроизвести сбой внутри GDB, чтобы вы могли отладить его. Заставить gdb загрузить разделяемую библиотеку по случайному адресу .

В противном случае включить дамп ядра из вашей программы и использовать GDB для дампа ядра.
gdb ./prog core.1234.

На x86 вы можете вставить инструкцию ud2 в ваш исходный код asm, чтобы преднамеренно вызвать сбой в любой точке вашего кода, если вы хотите, чтобы coredump проверял регистры / память в какой-то момент перед тем, как он падает на своемсвоя.Во всех архитектурах есть неопределенная инструкция, которую вы можете использовать, но я знаю только мнемонику для x86, которая находится на моей голове.

...