为什么不给人们不同的标题
他们已经拿到了;标题被按主题分成文件,因此需要另一个维度来过滤。
我一直在寻找信号编号到名称的转换。我在<string.h> 中找到了strsignal()。手册页说:
sigabbrev_np(), sigdescr_np():
_GNU_SOURCE <<< not default
strsignal():
From glibc 2.10 to 2.31:
_POSIX_C_SOURCE >= 200809L <<< default, cf. XOPEN2K8 below
Before glibc 2.10:
_GNU_SOURCE
我从来没有真正关心过这部分。 sigabbrev_np()不包含在默认“功能”中。 string.h 显示如何:
#ifdef __USE_XOPEN2K8
/* Return a string describing the meaning of the signal number in SIG. */
extern char *strsignal (int __sig) __THROW;
# ifdef __USE_GNU
/* Return an abbreviation string for the signal number SIG. */
extern const char *sigabbrev_np (int __sig) __THROW;
/* Return a string describing the meaning of the signal number in SIG,
the result is not translated. */
extern const char *sigdescr_np (int __sig) __THROW;
# endif
__USE_GNU 可以/应该通过_GNU_SOURCE、在编译时或文件顶部设置。但这也会“激活”所有标题中的所有其他此类 ifdefed 声明。 (除非您为每个标题定义-取消定义)
所以要显式导入一个(或其他)特殊功能,我现在就这样(复制粘贴。我离开了“THROW”并更改了“__sig”):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
extern const char *sigabbrev_np(int sig) __THROW; /* __USE_GNU / _GNU_SOURCE */
#include <errno.h>
#include <elf.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
...
现在sigabbrev_np(wstate >> 8) 给我TRAP 等等,没有#defines。
我很难意识到 0x57f 的意思是 OK,因为 5 是 TRAP,但 0xb7f 和 0x77f 是 SEGV 和 BUS --- 这取决于我在哪里设置断点,有时在数千条指令之后。因为我没有后退指令指针……