小编Vin*_*gis的帖子

为什么使用Bash只读变量来捕获输出无法捕获返回码$?

这是一个尝试执行命令并检查它是否成功执行的示例,同时捕获它的输出以进行进一步处理:

#!/bin/bash

readonly OUTPUT=$(foo)
readonly RES=$?

if [[ ${RES} != 0 ]]
then
    echo "failed to execute foo"
    exit 1
else
    echo "foo success: '${OUTPUT}'"
fi
Run Code Online (Sandbox Code Playgroud)

它报告它是成功的,即使没有这样的foo可执行文件.但是,如果我readonlyOUTPUT变量中删除,它会保留错误的退出代码并检测到故障.

我尝试使用readonly作为"防御性编程"技术,如某处所推荐的那样......但在这种情况下看起来像是咬了自己.

是否有一些干净的解决方案,以保持readonly仍然捕获命令/子shell的退出代码?令人失望的是,人们必须记住这种特殊的用例,或者恢复到不使用readonly永远......

在Debian Wheezy上使用Bash 4.2.37(1).

variables bash

12
推荐指数
1
解决办法
549
查看次数

如何解释回溯地址以便使用GDB进行调试

我使用backtrace()和backtrace_symbols()来输出SIGSEGV和其他信号的回溯,格式如下:

0: [0xb750818]
1: /opt/server/libQtScript.so.4(+0x6f42a) [0xb782c42a]
2: /opt/server/libQtScript.so.4(+0x7bffc) [0xb7838ffc]
3: /opt/server/libQtScript.so.4(+0x86946) [0xb7843946]
4: /opt/server/libQtScript.so.4(+0x7c4bc) [0xb78394bc]
5: /opt/server/libQtScript.so.4(+0x86946) [0xb7843946]
6: /opt/server/libQtScript.so.4(+0x9603e) [0xb785303e]
7: /opt/server/libQtScript.so.4(_ZN12QScriptValue4callERKS_RK5QListIS_E+0x2e7) [0xb7891647]
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,帧#7对我来说很好,尽管帧1-6给了我一些"+ x"地址.

如何在"+ 0x6f42a"和GDB中的其他地址反汇编中得到确切的行?什么帧#0,没有描述模块,意味着什么?

gdb backtrace debug-backtrace

5
推荐指数
1
解决办法
5385
查看次数

标签 统计

backtrace ×1

bash ×1

debug-backtrace ×1

gdb ×1

variables ×1