0

小さな質問があります。C / C ++で、GDBともう少し相互作用するコードを追加することは可能ですか?

私が次のような機能を持っているとしましょう

void gdb_print(const char*);

これにより、実行中にgdbに情報が出力されます。それが不可能な場合、それは素晴らしいでしょう。いくつかの情報を追跡するのは簡単で、何らかの方法でより速くなります!

プラグインをいくつか作成していて、coutまたはcerrからの情報がコンソールにまったく送信されないため、このようなものが必要です。したがって、それは離散的なものになります。また、次のようなものを追加することもできます。

#ifdef __DEBUG__
  #define debug_msg(x) gdb_print(x)
#else
  #define debug_msg(x)
#endif

存在しない場合は、これについてどう思うか教えてください!

4

3 に答える 3

1

を使用して、stderrとstdoutファイルをリダイレクトしてみてくださいfreopenこれを参照してください

stdoutこれは、実行時にファイルにリダイレクトするためのサンプルコードです。

/* freopen example: redirecting stdout */
#include <stdio.h>

int main ()
{
  freopen ("myfile.txt","w",stdout);
  printf ("This sentence is redirected to a file.");
  fclose (stdout);
  return 0;
}
于 2012-05-11T18:03:45.250 に答える
1
static int gdb = 0;
void gdb_print(char const * msg) {
    if(gdb) printf("\tGDB: %s\n", msg);
}

プログラムをgdbにロードするときは、mainにブレークポイントを設定してから、gdbをゼロ以外の値に設定します。これは最もクリーンなソリューションではありません(そして確かに自動化されていません)が、あなたが探しているものを提供すると思います。必ずプロセッサごとに使用して、デバッグ以外のビルドの呼び出しを削除してください(trueと評価されない余分な比較をすべて行う意味はありません)。

于 2012-05-11T18:14:48.273 に答える
1

プラグインをいくつか作成していて、coutまたはcerrからの情報がコンソールにまったく送信されないため、このようなものが必要です。

次のコマンドでいつでもコンソールに書き込むことができます。

FILE *console = fopen("/dev/tty", "w");
if (console != NULL) fprintf(console, "Your debug message\n");

GDBが実行されている端末(プログラム自体が呼び出された端末とは異なる可能性があります)に具体的に書き込む方法がわかりません。

于 2012-05-12T02:46:43.437 に答える