widgg
widgg

Reputation: 1428

put code executed by GDB

I have small question. Is it possible in C/C++ to put bit of codes that would interact a bit more with GDB ?

Let say I have a function like

void gdb_print(const char*);

This would print information in gdb while it executes! If it's not possible it would be awesome. Would be simple to track some information, and faster in some way!

I need something like this, because we're writing some plugins, and info from cout or cerr are not going to the console at all. So it would be something discrete. Also, could add some stuff like:

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

If it doesn't exist, let me know what you think about this!

Upvotes: 0

Views: 233

Answers (3)

Employed Russian
Employed Russian

Reputation: 213526

I need something like this, because we're writing some plugins, and info from cout or cerr are not going to the console at all.

You can always write to console with:

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

I don't know of a method to write specifically to the terminal where GDB is running (which could well be different terminal from which the program itself was invoked).

Upvotes: 1

Stephen Newell
Stephen Newell

Reputation: 7838

static int gdb = 0;
void gdb_print(char const * msg) {
    if(gdb) printf("\tGDB: %s\n", msg);
}

When you load your program up in gdb, set a breakpoint in main, then set gdb to a non-zero value. This isn't the cleanest solution (and certainly not automated) but I think it'll give you what you're looking for. Be sure to use the per-processor to remove the calls in non-debug builds (no sense in having all those extra compares that'll never evaluate to true).

Upvotes: 1

Kamyar Souri
Kamyar Souri

Reputation: 1923

try redirecting the stderr and stdout to a file using freopen. see this

This is a sample code to redirect stdout to a file in runtime:

/* 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;
}

Upvotes: 1

Related Questions