Я хотел бы выяснить, где именно приложение, написанное на C/C++, дает сбой. Я не могу отлаживать приложение напрямую, ни с помощью gdb/lldb, ни с помощью IDE, потому что приложение запускается программой (это контроллер робота для программного обеспечения для моделирования роботов webots). В консоли OSX я могу найти «Отчет о диагностике пользователя», в котором даже показана трассировка в момент сбоя. Мне просто нужно выяснить, где именно в моем исходном коде происходит сбой, но я не понимаю следующий синтаксис трассировки стека:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: EXC_I386_GPFLT
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_c.dylib 0x00007fff92d6b859 strtol_l + 77
1 controller_2 0x0000000100006b57 main + 4839
2 controller_2 0x00000001000010b4 start + 52
По-видимому, где-то (+4839
) в моей функции int main() {}
что-то в конце концов вызывает strtol_l
(должно быть косвенным, потому что в коде контроллера нет вызова этой функции), что вызывает сбой.
Что означает + 4839
? это смещение блока памяти? Это не может быть номер строки исходного кода, так как исходный код для контроллера составляет всего около 1200 строк, а контроллер не скомпилирован с отладочной информацией.
+ 4839
говорит, что он вызвалstrtol_l
в 4839-й инструкции процессора после того, как ввелmain
. Если вы дизассемблируете запущенный вами двоичный файл, вы сможете найти, что это за инструкция, и, возможно, найти ссылку на знакомую строку кода в окружающей сборке. - person nonsensickle   schedule 29.05.2015main
. - person user3386109   schedule 29.05.2015libsystem_c.dylib
есть ошибка, по крайней мере, я не надеюсь, что она есть.. - person Michael Trouw   schedule 31.05.2015otool -tv
в скомпилированном объектном файле дает мне ассемблер, похожий на тарабарщину, и я не могу прочитать какие-либо полезные сигнатуры функций: pastebin.com/33uACurn запускotool -tv
в файле .out также дает ту же тарабарщину, но теперь с некоторыми дополнительными функциями, такими как подписи. Где заканчивается «основной» файл? Я пытался найти его, но не знаю, где искать. Как еще, кроме использованияotool
, я могу дизассемблировать бинарник? - person Michael Trouw   schedule 25.06.2015