C/C++ で記述されたアプリケーションがどこで失敗するかを正確に知りたいです。アプリケーションはプログラムによって起動されるため、gdb / lldbを使用したり、IDEを使用したりして、アプリケーションを直接デバッグすることはできません(webotsロボットシミュレーションソフトウェアのロボットコントローラーです)。OSX コンソールでは、クラッシュの瞬間に strack トレースを示す「ユーザー診断レポート」を見つけることができます。ソース コードのどこでクラッシュが発生したかを正確に特定する必要があるだけですが、次のスタック トレース構文がわかりません。
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 行しかなく、コントローラーはデバッグ情報を使用してコンパイルされていないため、ソース コードの行番号にすることはできません。