如何让g++(avr-g++)输出错误行号和列?

问题描述 投票:0回答:1

我相信-g打开调试信息输出:

09-19 19:31:34.788: INFO/System.out(24948): /data/data/app/sdk/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -I/data/data/app/sdk/hardware/arduino/cores/arduino -I/data/data/app/sdk/hardware/arduino/variants/standard /data/data/app/build/Blink.cpp -o /data/data/app/build/Blink.cpp.o
09-19 19:31:34.828: WARN/System.err(24948): /data/data/app/sdk/hardware/tools/avr/bin/avr-g++[1]: syntax error: ')' unexpected

不确定命令行是否正确构建,并且可能会遗漏一些参数,但它是arduino IDE代码

为什么错误行号和列丢失以及如何将其打开?

debugging gcc g++
1个回答
2
投票

根据评论更新

OP 在 Linux 系统上安装了 MacOS

g++
可执行文件。 Linux系统无法将其识别为可执行文件,因此尝试将其作为shell脚本执行,从而导致出现误导性的错误消息。


特定的错误消息:

syntax error: ')' unexpected

看起来像是 shell 错误,而不是编译器错误。

在我的系统上,带有无关

)
的 C++ 程序会导致 g++ 生成以下消息:

c.cpp: In function ‘int main()’:
c.cpp:2:5: error: expected primary-expression before ‘)’ token
c.cpp:2:5: error: expected ‘;’ before ‘)’ token

请注意,这些消息包括行号和列号,就像 g++ 语法错误消息通常所做的那样。

而带有无关的

)
的 Bourne shell 脚本会生成如下消息:

./foo.sh: 3: ./foo.sh: Syntax error: ")" unexpected

与您所看到的非常相似,但不完全相同。 (差异很容易由

sh
的不同实现引起。)

在某个地方,要么您的 shell 脚本存在语法错误,要么您尝试执行 shell 脚本以外的其他内容,就好像它是 shell 脚本一样。

您运行的哪个命令会产生此错误?是

/data/data/app/sdk/hardware/tools/avr/bin/avr-g++

一个正确的可执行文件?如果你跑步会发生什么

/data/data/app/sdk/hardware/tools/avr/bin/avr-g++ --version

从命令行? 怎么样

file /data/data/app/sdk/hardware/tools/avr/bin/avr-g++ ?

来自评论,此命令:

/data/data/app/sdk/hardware/tools/avr/bin/avr-g++ --version

产生相同的错误消息:

syntax error: ')' unexpected).

这意味着

avr-g++
命令是可执行的,但系统无法将其识别为可执行文件,因此它尝试将其作为 shell 脚本运行。

您在什么操作系统上运行它?

avr-g++
命令是否旨在在主机系统或目标上运行(在 Arduino 上运行
g++
似乎不太可能)。比较

的输出
file /data/data/app/sdk/hardware/tools/avr/bin/avr-g++

例如,

file /usr/bin/g++

或者,如果它是符号链接,则指向它指向的任何实际文件(在我的系统上

/usr/bin/g++-4.7
)。关键是要确定这个
avr-g++
是什么类型的文件,并将其与已知适合您的系统的可执行文件进行比较。 (为了百分百确定,请尝试
/usr/bin/g++ --version
。)

例如,在我的系统上,我得到:

$ file /usr/bin/g++
/usr/bin/g++: symbolic link to `g++-4.7'
$ file /usr/bin/g++-4.7
/usr/bin/g++-4.7: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xac398e1061dbb1a6f8da022f0a1616f15cf07085, stripped
© www.soinside.com 2019 - 2024. All rights reserved.