pun*_*r12 14 c c++ linux gdb environment-variables
我在linux上用GDB调试程序.我正在使用getenv并setenv调用读取和设置环境变量.例如,我setenv("TZ", "UTC", 1);打算为时区设置TZ环境变量.
要检查是否设置了env变量,我正在使用GDB命令show environment.这将打印所有环境变量及其值.但它没有表明TZ被设定.
甚至命令show environment TZ说Environment variable "TZ" not defined.
他们是另一种检查调试程序环境的方法吗?
p *(char *) getenv("TZ")重新确认正确的价值UTC.
ric*_*ici 12
gdb命令show environment显示属于gdb[请参阅注释]的环境,而不是正在调试的程序的环境.
打电话getenv似乎是一种打印正在运行的程序环境的完全合理的方法.
Gdb维护一个环境数组,最初从它自己的环境中复制,用于启动每个新的子进程.show environment并且set environment在此环境中工作,因此set environment将在下次启动正在调试的程序时更改环境变量.一旦程序启动,加载器就会将环境复制到程序的地址空间中,并且setenv应用于该数组所做的任何更改,而不是由该数组维护的更改gdb.
在Linux上,每个进程的环境都可以通过伪文件获得/proc/PID/environ,其中PID由进程的pid替换.该文件的值是以空字符结尾的字符串列表,因此将其打印出来需要少量工作.
在gdb内部,一旦你开始运行要调试的程序,就可以获得它的pid info proc然后用它来打印整个环境:
(gdb) info proc
process 6074
...
(gdb) shell xargs -0 printf %s\\n < /proc/6074/environ
XDG_VTNR=7
KDE_MULTIHEAD=false
...
Run Code Online (Sandbox Code Playgroud)
当然,我可以在gdb之外,从不同的终端轻松完成.
| 归档时间: |
|
| 查看次数: |
10788 次 |
| 最近记录: |