【问题标题】:Logging error during execution in C在 C 中执行期间记录错误
【发布时间】:2014-09-26 02:26:45
【问题描述】:

所以我知道记录编译错误可以在终端如下进行

gcc -o objectname filename.c 2>'compilation_error_log.txt'

我在执行代码时遇到了一些内存错误,我也想记录下来。我尝试了同样的方法

./objectname 2>'Execution_error_log.txt'

但它不起作用。有人可以告诉我内存错误存储在哪里以便我可以记录它们吗? 我的错误和输出看起来有点像这样

./objectname arg
Expected Output.
*** Error in `./objectname': double free or corruption (!prev): 0x089d1008 ***
Aborted (core dumped)

我想记录预期的输出和错误消息

【问题讨论】:

  • 我试过了。但它不起作用。我必须在调用对象时给出一个论点。应该提到..
  • 是的,也这样做了。没用:|错误是 stderror 还是其他类型的错误?
  • 所以我现在认为这不是标准错误。据我了解,程序因 SIGABRT 信号而中止。所以这个方法应该行不通。
  • 你有什么样的执行错误? Aborted (core dumped) 消息是由你的 shell 给出的,而不是你的程序给出的!

标签: c++ c bash gcc execution


【解决方案1】:

默认情况下,glibc 错误消息被写入/dev/tty,不会重定向到任何地方。

您可以通过将环境变量LIBC_FATAL_STDERR_ 设置为1 来请求stderr 中的消息。之后,您可以2> log.file

当您的应用程序已经关闭 stderr(或文件描述符 2)并且之后发生致命错误时,默认行为是安全的解决方法。

【讨论】:

    【解决方案2】:

    在 ash 中执行 ./objectname arg 1 > compilation_error_log.txt 2>&1 应该可以工作。基本上你必须提供对文件的重定向,然后将错误流重定向到标准输入文件描述符。

    【讨论】:

    • 那是重定向到编译日志的正确答案。但是,如果您要将其发布为 answer 而不是 comment,则需要解释您的答案并提供背景信息以教育发布者为什么这是正确的回答。否则,即使它是正确的,你也会因为提供低质量的答案而遭到反对。
    • 请看我提供的信息是否足够。
    猜你喜欢
    • 1970-01-01
    • 2010-09-13
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2015-09-16
    • 2018-12-20
    相关资源
    最近更新 更多