Re: Run multiple parallel instances of gdb
LE GARREC Vincent <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <CAH0JWTuDBcAHMraNUR0kUmJ4UZutBH-KxLMbCG0NnZ9U8Hf+YQ@mail.gmail.com> |
I don't have a suspended message, it a stopped. But the behavior is the same. [1]+ Stopped ./loopgdb My stty: speed 38400 baud; line = 0; erase = ^H; -brkint -imaxbel iutf8 but your diagnostic is right. Adding the "-ex tty /dev/null" is perfect. I will do some search about this "tostop" flag. For the minimal testcase, I did it a bit fast but the "do" didn't missing in my code. Thanks for your advice, you really help me, Best regards, Vincent 2018-03-11 21:54 GMT+01:00 Simon Marchi <[email protected]>: > On 2018-03-11 16:15, LE GARREC Vincent wrote: > >> Hi everybody, >> >> I would like to sort crashes found by fuzzing. So I have around 1000 files >> that make my application crashes. I made a small program to run gdb and to >> extract backtraces to file. To increase speed, I run parallel instances. >> >> Problem, with parallel instances, my program stopped. It doesn't crashes, >> it stops. I have to run "fg" from terminal to continue and it's happening >> very often. So actually, I'm running with single thread. >> >> Is it normal ? Did I do something wrong ? If you need more information, I >> can give you. >> >> Please find after simple steps to reproduce the case, >> >> Thanks for you advices, >> >> Vincent Le Garrec >> > > Hi Vincent, > > Do you get a "suspended (tty output)" message? If so, what you have is a > background process trying to output on the terminal while the terminal has > the "tostop" flag set. A simpler case to reproduce it is: > > $ gdb -batch -ex run --args /bin/echo salut & > [1] 28223 > $ > [1] + 28223 suspended (tty output) gdb -q -batch -ex run --args > /bin/echo salut > > I don't understand why though, because my terminal does not have "tostop" > enabled: > > $ stty > speed 38400 baud; line = 0; > -brkint -imaxbel iutf8 > > So something in the process probably sets that flag... Anyway, one way to > get around it is to change the terminal for the newly created inferiors, > for example to /dev/null if you don't need them to do I/O on the terminal: > > $ gdb -batch -ex "tty /dev/null" -ex run --args /bin/echo salut & > [1] 28276 > $ [Inferior 1 (process 28285) exited normally] > > [1] + 28276 done gdb -q -batch -ex "tty /dev/null" -ex run --args > /bin/echo salut > > One comment below: > > [1] : crash program >> main.c (in /tmp folder) >> >> int main() >> { >> int *t = 0xDEADBEEF; >> *t = 1; >> } >> >> Run it and it should crash. >> >> [2] : multiple execution of gdb >> loopgdb.cpp >> >> #include <thread> >> #include <future> >> #include <vector> >> #include <functional> >> #include <unistd.h> >> #include <iostream> >> #include <sys/types.h> >> #include <sys/wait.h> >> >> void run_gdb() >> { >> pid_t child_pid = fork(); >> std::cout << "run" << std::endl; >> if (child_pid != 0) >> { >> pid_t wait_pid; >> { >> wait_pid = waitpid(child_pid, nullptr, WNOHANG); >> sleep(1); >> } >> while(wait_pid == 0); >> > > You are missing the "do" from your do/while, which results in an infinite > loop here (if wait_pid is 0). > > Simon >