tcl catch解决调用gcc编译代码莫名崩掉的问题

本文探讨了在使用TCL脚本调用GCC编译器时遇到的奇怪问题,即直接在终端中编译代码成功,但在TCL脚本中调用时失败。通过加入catch语句捕捉异常并解析GCC编译报告,实现了问题的解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在工作中, 遇到一个奇怪的问题:  在terminal, gcc 编译一些代码可以通过, echo $? 回显0, 但将gcc编译命令用包装到tcl脚本后,运行却崩掉了.  一直以为代码有问题, 做完代码精简,才发现tcl对gcc编译子过程的调用有问题. 实在没琢磨透为什么, 只能在tcl脚本中加入catch 捕捉异常,然后解析gcc的编译报告,再决定是否报错.

---------------------------------
$ gcc -c test.cpp
test.cpp:3:54: note: ...
    ("i tell you something are not right")
                                         ^
$ echo $?
0
--------------------------------

 

包装到tcl脚本后:

--------------------------------------------------

$ cat c.tcl
exec /usr/bin/gcc -c test.cpp 
  
$ tclsh c.tcl
test.cpp:3:54: note: 
    ("i tell you something are not right")
                                         ^
    while executing
"exec /usr/bin/gcc -c test.cpp  "
    (file "c.tcl" line 1)
$ echo $?
1
------------------------------------------------

解决办法:

将c.tcl 中做以下修改:

 1.  catch {exec /usr/bin/gcc -c ts.cpp | tee gcc.log} r

 2. 解析gcc.log然后解析内容输出. 当然, 在上一句可以将gcc编译输出重定向到屏幕输出, 这里只做判断是否终止的工作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值