getpgid не реализован в valgrind - PullRequest
       17

getpgid не реализован в valgrind

7 голосов
/ 23 октября 2019

Рассматривая этот пример:

#include <stdio.h>
#include <unistd.h>

int     main()
{
    int pgid;

    if ((pgid = getpgid(0)) == -1)
        perror("getpgid");
    else
        printf("pgid : %d\n", pgid);
}

Когда я запускаю эту программу без valgrind, все идет хорошо, и печатается pgid. Всякий раз, когда я использую valgrind, perror будет печатать getpgid: Function not implemented.

  • Это нормально, что getpgid это недоступно в valgrind ?

  • Есть ли альтернатива для получения pgid определенного pid (исключая getpgrp)?

IИспользую macOS Sierra 10.12.6 и valgrind-3.15.0.

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Вы не должны тестировать через valgrind в Mac OS X , потому что после Sierra он не поддерживается. Вместо этого я тоже делаю: устанавливаю Ubuntu с помощью программного обеспечения для виртуальной машины, затем запускаю valgrind.

macOS Mojave 10.14.6 unistd.h содержит следующую часть:

#if __DARWIN_UNIX03
void     encrypt(char *, int) __DARWIN_ALIAS(encrypt);
#else /* !__DARWIN_UNIX03 */
int  encrypt(char *, int);
#endif /* __DARWIN_UNIX03 */
int  fchdir(int);
long     gethostid(void);
pid_t    getpgid(pid_t);
pid_t    getsid(pid_t);

Правилоthumb, всегда старайся быть переносимым!


Кстати, как упоминает @Andrew Henle, pid_t может быть системно-зависимым типом. Но для сохранения переносимости это не должен быть тип без знака , поскольку в случае сбоя он может быть возвращен как -1. Более того, в Mac OS X его тип int, как показано ниже

typedef int               __int32_t;
typedef __int32_t         __darwin_pid_t;         /* [???] process and group IDs */
typedef __darwin_pid_t    pid_t;
1 голос
/ 23 октября 2019

Кажется, что у valgrind могут возникнуть проблемы с выполнением некоторого системного вызова.

В трассировке valgrind у меня есть:

--17135-- WARNING: unhandled amd64-darwin syscall: unix:151
--17135-- You may be able to write your own handler.
--17135-- Read the file README_MISSING_SYSCALL_OR_IOCTL.
--17135-- Nevertheless we consider this a bug.  Please report
--17135-- it at http://valgrind.org/support/bug_reports.html.

Так что мне нужно создать оболочку дляфункция, и она должна работать. Я сообщу об ошибке в службу поддержки.

...