Эта ошибка появляется при использовании нескольких учетных записей Git на одном компьютере.
Если вы используете macOS, вы можете удалить сохраненные учетные данные github.com .
Пожалуйста, следуйте приведенным ниже инструкциям, чтобы удалить учетные данные github.com .
This type of response from gdb:
(gdb) bt
#0 0xc0199470 in ?? ()
can also happen in the case that the stack was smashed by a buffer overrun, where the return address was overwritten in memory, so the program counter gets set to a seemingly random area.
This is one of the ways that even a build with a corresponding symbol database can cause a symbol lookup error (or strange looking backtraces). If you still get this after you have the symbol table, your problem is likely that your customer's data is causing some issues with your code.
For the future:
For this situation:
You know the general area, so to see if you are right, go to the stack trace and find the assembly code -- eyeball it and see if you think it matches your source (this is easier if you have some idea what source generated this assembly). If it looks right, then you have some verification on your hypothesis. You might be able to figure out the values of the local variables by looking at the stack (since you know what you passed in and declared).
Do you have the exact source that you used to compile the old version (eg; through a tag in the source tree or something like that)? Maybe you could rebuild using that, and possibly get an insight into where the crash occured?
There is not much information here. The binary is stripped.But looking at segmentation fault...you should look for places where there is a possibility that you are overwriting a piece of memory.
This is just a suggestion. There can be many problems.
BTW, if you are not able to reproduce in your local machine then the volume of data on customers' might be a problem.
В gdb "информационные регистры" должны предоставить вам достаточно состояние выполнения на момент сбоя для использования с дизассемблированием исполняемого файла и соответствующих разделяемых библиотек. Обычно я использую objdump для дизассемблирования, перенаправления вывода в файл, а затем вызываю файл в моем любимом редакторе - это полезно для ведения заметок, когда все выясняется. Также gdb "info target" и "info sharedlib" могут быть полезны для определения того, где загружаются разделяемые библиотеки.
Имея в руках состояние регистров, содержимое стека и разборку, а также немного удачи, это должно быть просто (если утомительно ), чтобы восстановить стек вызовов (если, конечно, стек не был поврежден переполнением буфера или подобной катастрофой ...
Я не думаю, что основной файл должен содержать символы. Вам необходимо создать версию своей программы, которая точно такая же , что и та, которую вы отправили своему клиенту, но с параметром -g. Если вы удалите исполняемый файл отладки, он должен быть идентичен поставляемой версии. Только тогда GDB сможет дать вам что-нибудь полезное.
Попробуйте запустить «pmap» для файла ядра (если в hp / ux есть этот инструмент). Это должно сообщить начальные адреса всех модулей в основном файле. Имея эту информацию, вы сможете узнать адрес места сбоя и выяснить, какая библиотека потерпела крах. Дальнейшее сравнение адресов между адресом сбоя и адресами известных функций в библиотеке («nm» по сравнению с библиотекой должно получить это) может помочь вам определить, какая функция потерпела крах.
Даже если вам удастся идентифицировать функцию в на вершине стека, маловероятно, что эта функция является источником проблемы ... надеюсь, она действительно вызвала сбой в вашем коде, а не, скажем, в стандартной строковой библиотеке C. Перестроение трассировки стека - следующая лучшая вещь на этом этапе.