プログラムをデバッグしたいのですが、GDB がアクセスしたコードをローカル ソース ファイル スコープ外に出力したくありません。この場合、オプションstep (すべての呼び出しに入る) とnext (同じソース ファイル内であっても関数へのステップ インをスキップする) は役に立ちません。
同じ点はありますか?
ありがとう
プログラムをデバッグしたいのですが、GDB がアクセスしたコードをローカル ソース ファイル スコープ外に出力したくありません。この場合、オプションstep (すべての呼び出しに入る) とnext (同じソース ファイル内であっても関数へのステップ インをスキップする) は役に立ちません。
同じ点はありますか?
ありがとう
Does GDB has a “step-to-next call” instruction? に対する私の回答をご覧ください。: そのためのネイティブ GDB コマンドはありません (私の知る限り、彼らはそれに取り組んでいる可能性があります) が、Python で行うのは簡単です:
import gdb
class StepNoLibrary (gdb.Command):
def __init__ (self):
super (StepNoLibrary, self).__init__ ("step-no-library",
gdb.COMMAND_OBSCURE)
def invoke (self, arg, from_tty):
step_msg = gdb.execute("step", to_string=True)
fname = gdb.newest_frame().function().symtab.objfile.filename
if fname.startswith("/usr"):
# inside a library
SILENT=False
gdb.execute("finish", to_string=SILENT)
else:
# inside the application
print(step_msg[:-1])
StepNoLibrary()
それをファイルに入れて、GDB(または.gdbinit)でソース化するだけで、新しいコマンドが提供されますstep-no-library
.
それが何をするかを読むのは簡単です、それは1つ前に進みstep
ます、そしてステップがに保存されたファイルに終わったら、/usr/*
それfinish
はアプリケーションに戻ることです。
もちろん、それは単純な実装です。要件がそれと異なる場合は、関数コードを編集するだけです!
DDD(データ表示デバッガ)を使ってみてはいかがでしょうか。gdbについて多くのことを思い出させます
次のように入力します。
ddd --gdb
それで
g++ -O0 -g -o main main.cpp
それが役立つことを願っています