This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Run multiple parallel instances of gdb
- From: LE GARREC Vincent <legarrec dot vincent at gmail dot com>
- To: Simon Marchi <simon dot marchi at polymtl dot ca>
- Cc: gdb at sourceware dot org
- Date: Sun, 11 Mar 2018 22:37:34 +0100
- Subject: Re: Run multiple parallel instances of gdb
- Authentication-results: sourceware.org; auth=none
- References: <CAH0JWTvJO7opYb=3ANZOiJG9KnJ+pDryMHP6mS5xoB2_V-BWEw@mail.gmail.com> <4b04209db0308576e68320a5d22181e4@polymtl.ca>
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 <simon.marchi@polymtl.ca>:
> 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
>