私はvim
C ++プログラミングに使用しています。コンパイルコマンドをctrl+c
vimにバインドし、を実行して別のtmux
ペインで実行し./main.out
ます。私の問題は、c ++プログラムでsegmentation fault
エラーが発生したときに、どの行が問題の原因であるかわからないことです。しかし、でプログラムをコンパイルして実行するとvscode
、エラーの原因となった行が表示されました。segmentation fault
コンソールでプログラムのバイナリファイルを実行しているときにエラーなどのランタイムエラーを引き起こす行を見つける方法を探しています。これは私がしたときの出力例です./main.out
:
[1] 24656 segmentation fault (core dumped) ./main.out
プログラムをコンパイルするときは、実行可能ファイルにデバッグシンボルを追加することで、-g
コンパイラフラグを追加するか、さらに良い方法-ggdb3
で出力をよりきれいにします。また、-O0
最適化レベルでコンパイルするようにしてください。
実際にプログラムをデバッグするには、を実行gdb ./main.out
してデバッグセッションでプログラムを開始します。その後、を実行するとr
、gdbはプログラムの実行を開始し、segfaultを与える行で停止します。
その時点に到達した方法を理解するにbt
は、デバッグセッション中に実行すると、クラッシュしたコード行に到達するために行われたすべての関数呼び出しを示すバックトレースが表示されます。
もちろん、これ以上のことを行うことができます(エラーの原因を特定することは、多くの場合、最初のステップにすぎないため、おそらくそうする必要があります)。を使用p
して、変数の値を出力したり、ウォッチポイントを設定したりすることができます。しばらくの間、gdbには本格的なPythonインタープリターが付属しているため、カスタムデバッグのニーズに合わせてPythonスクリプトを作成することもできます。
gdbの使い方を学ぶことは、最初は圧倒されるように思えるかもしれませんが、根気強く、努力が大きな成果を上げることを保証します:)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加