gpt4 book ai didi

ada - 如何让 gnattest 只考虑我的 src 目录中的代码?

转载 作者:行者123 更新时间:2023-12-04 10:53:13 26 4
gpt4 key购买 nike

我必须给 gnattest 什么命令才能让它只考虑我的 src 目录中的代码(并忽略所有子项目,例如 Ada 驱动程序库)?

我已阅读 this question ,它说用“Test_Case”方面标记我想测试的每个子程序。如果必须的话,我会走那条路,但我希望 gnattest 的保护自动为新代码添加新的测试用例,这样我就不会错过任何东西。

这是我的 gpr 文件:

with "c:\Domains\ada\Ada_Drivers_Library\boards\MicroBit\microbit_zfp.gpr";

project Demo_Project is

for Runtime ("ada") use Microbit_Zfp'Runtime ("Ada");
for Target use "arm-eabi";
for Main use ("main.adb");
for Languages use ("Ada");
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Create_Missing_Dirs use "True";

package Compiler renames Microbit_Zfp.Compiler;

package Linker is
for Default_Switches ("ada") use Microbit_Zfp.Linker_Switches & ("-Wl,--print-memory-usage", "-Wl,--gc-sections", "-U__gnat_irq_trap");
end Linker;

package Ide is
for Program_Host use ":1234";
for Communication_Protocol use "remote";
for Connection_Tool use "pyocd";
end Ide;

package Prove is
for Proof_Switches ("Ada") use ("-j0");
end Prove;

package Builder is
for Switches ("ada") use ("-j0", "-s");
end Builder;

end Demo_Project;

这是 GPS 创建的 gnattest 命令(它错误地为 ada 驱动程序库创建了测试):
arm-eabi-gnat test -Pdemo_project.gpr --tests-dir=C:\Domains\ada\demo_project\microbit\tests

更新:2019-12-17:

这是我运行建议答案时得到的结果:
>c:\GNAT\2019\bin\gnattest -Pdemo_project.gpr --tests-dir=tests

Could not locate exec arm-eabi-gnatls
gprconfig: can't find a toolchain for the following configuration:
gprconfig: language 'ada', target 'arm-eabi', runtime 'zfp-cortex-m0'
microbit_zfp.gpr:61:25: warning: libraries are not supported on this platform

object path not found for runtime zfp-cortex-m0
gnattest: initialization failed

更新:2019-12-17(2):

我通过像这样添加“--test-case-only”标志并在 Battery 包中的单个过程中添加 test_case 方面取得了一些进展。这是我运行的命令:
arm-eabi-gnat test -dd -PC:\Domains\ada\Demo_Project\microbit\demo_project.gpr --tests-dir=C:\Domains\ada\Demo_Project\tests --test-case-only

Gnatest 成功了。我可以在测试的项目 View 中看到我的电池包。但是,当我尝试从 GPS 构建和运行它时,我得到了这个烂摊子:
gprbuild --target=arm-eabi -d -PC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_driver.gpr -XADL_BUILD_CHECKS=Enabled -XADL_BUILD=Debug -XTEST_DRIVER_BUILD_MODE=no-config-file C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_runner.adb -largs -Wl,-Map=map.txt
Compile
[Ada] test_runner.adb
[Ada] gnattest_main_suite.adb
[Ada] battery-test_data.adb
[Ada] battery-test_data-tests.adb
battery-test_data-tests.adb:40:13: warning: pragma Restrictions (No_Exception_Propagation) in effect
battery-test_data-tests.adb:40:13: warning: this handler can never be entered, and has been removed
battery-test_data-tests.adb:53:13: warning: pragma Restrictions (No_Exception_Propagation) in effect
battery-test_data-tests.adb:53:13: warning: this handler can never be entered, and has been removed
[Ada] battery-test_data-tests-suite.adb
[Ada] gnattest_generated.ads
Bind
[gprbind] test_runner.bexch
[Ada] test_runner.ali
Link
[link] test_runner.adb
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: C:\Domains\ada\Ada_Drivers_Library\boards\MicroBit\obj\zfp_lib_Debug\libada_drivers_library.a(crt0.o): in function `hang':
(.text+0x40): undefined reference to `__stack_end'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: (.text+0x48): undefined reference to `__data_words'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: (.text+0x4c): undefined reference to `__data_load'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: (.text+0x54): undefined reference to `__bss_words'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: C:\Domains\ada\Ada_Drivers_Library\boards\MicroBit\obj\zfp_lib_Debug\libada_drivers_library.a(crt0.o): in function `__vectors':
(.vectors+0x0): undefined reference to `__stack_end'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: C:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\adalib\libgnat.a(s-memory.o): in function `__gnat_malloc':
s-memory.adb:(.text.__gnat_malloc+0x40): undefined reference to `__heap_end'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: C:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\adalib\libgnat.a(s-memory.o):(.data.system__memory__top+0x0): undefined reference to `__heap_start'
collect2.exe: error: ld returned 1 exit status
gprbuild: link of test_runner.adb failed
gprbuild: failed command was: c:\gnat\2019-arm-elf\bin\arm-eabi-gcc.exe test_runner.o b__test_runner.o C:\Domains\ada\Demo_Project\microbit\obj\battery.o C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\battery-test_data.o C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\gnattest_generated.o C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\battery-test_data-tests.o C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\battery-test_data-tests-suite.o C:\Domains\
ada\Demo_Project\microbit\obj\gnattest\harness\gnattest_main_suite.o C:\Domains\ada\Ada_Drivers_Library\boards\MicroBit\obj\zfp_lib_Debug\libada_drivers_library.a C:\gnat\2019-arm-elf\arm-eabi\zfp-cortex-m0\lib\aunit\libaunit.a -g -Wl,-Map=map.txt -LC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\ -LC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\ -LC:\gnat\2019-arm-elf\arm-eabi\zfp-cortex-m0\lib\aunit\ -LC:\Domains\ada\Demo_Project\microbit\obj\ -LC:\Domains\ada\Ada_Drive
rs_Library\boards\MicroBit\obj\zfp_lib_Debug\ -LC:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\adalib\ -static-libgcc C:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\adalib\libgnat.a -Wl,-LC:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\/adalib -nostartfiles -nolibc -mlittle-endian -mthumb -msoft-float -mcpu=cortex-m0 -o test_runner
[2019-12-17 10:47:38] process exited with status 4, 100% (174/174), elapsed time: 03.00s
Traceback (most recent call last):
File "C:\GNAT\2019\share\gps\support\ui\workflows\__init__.py", line 351, in internal_run_as_wf
r = workflow(*args, **kwargs)
File "C:\GNAT\2019\share\gps\plug-ins\memory_usage_providers\ld.py", line 242, in async_fetch_memory_usage_data
visitor.on_memory_usage_data_fetched(regions, sections, modules)
GPS.Unexpected_Exception: unexpected internal exception raised CONSTRAINT_ERROR : Memory_Usage_Views.Memory_Region_Description_Maps.Reference: key not in map
[C:\GNAT\2019\bin\gps.exe]
0x21a541b
0x197c5b5
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7d79bc at ???
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7d8b16 at ???
[C:\GNAT\2019\bin\gps.python27\python27.dll]
0x1e0c3d54
0x1e113eb9
0x1e114778
0x1e117ee2
0x1e119780
0x1e0b5831
0x1e08dae3
0x1e1141cb
0x1e117fbd
0x1e119780
0x1e0b5831
0x1e08dae3
0x1e09bfcf
0x1e08dae3
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7e459f at ???
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7e55e0 at ???
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7e5833 at ???
[C:\GNAT\2019\bin\gps.libgnatcoll\libgnatcoll.dll]
0xc08dbb4 at ???
[C:\GNAT\2019\bin\gps.exe]
0x197ecf7
0x1975d5f
0x10687c2
0x14ba66a
0x145cc61
0x15e0780
0xfcfa72
0x10b4114
0x10b4672
0x10b7893
0x10b7cf7
0xe30b4c
0xe31022
0xe2deaa
[C:\GNAT\2019\bin\gps.libglib-2.0-0\libglib-2.0-0.dll]
g_timeout_dispatch at gmain.c:4545
g_main_context_dispatch at gmain.c:3122
g_main_context_iterate.isra.10 at gmain.c:3808
g_main_context_iteration at gmain.c:3869
[C:\GNAT\2019\bin\gps.libgio-2.0-0\libgio-2.0-0.dll]
g_application_run at gapplication.c:2308
[C:\GNAT\2019\bin\gps.exe]
0x425199
0x2150c58
0x4013f6
0x4014e9
[C:\windows\system32\kernel32.dll]
0x7768556b
[C:\windows\SYSTEM32\ntdll.dll]
0x777e372b

Build error. [workflow stopped]

存在三个问题:
  • 自动生成的测试代码想要抛出异常,但我的项目不允许。
  • 之后我不明白任何输出。
  • 而且我真的不明白 gpr 文件是如何工作的。我确信有一个魔法咒语我可以在那里输入并解决这个问题,但我已经用谷歌搜索并尝试了一整天,但我被卡住了。

  • 仅供引用:我正在 Windows 7 上运行 2019 社区版的 gnat、ARM 交叉编译器和 GPS。

    更新:2019-12-18:

    我已经取得了一些进展,但它仍然无法正常工作。我按照 Fabien 的建议编辑了 test_driver.gpr。我不得不注释掉原始链接器包,因为它不适用于文件中的两个。

    test_driver.gpr 现在看起来像这样:

    with "test_demo_project.gpr";
    with "gnattest_common.gpr";
    with "c:\Domains\ada\Ada_Drivers_Library\boards\MicroBit\microbit_zfp.gpr";

    project Test_Driver is

    for Origin_Project use "..\..\..\demo_project.gpr";

    for Target use Gnattest_Common'Target;

    for Runtime ("Ada") use Gnattest_Common'Runtime ("Ada");

    for Languages use ("Ada", "ASM_CPP");
    for Main use ("test_runner.adb");
    for Exec_Dir use ".";

    package Builder renames Gnattest_Common.Builder;
    -- package Linker renames Gnattest_Common.Linker;

    package Linker is
    for Default_Switches ("Ada") use MicroBit_ZFP.Linker_Switches &
    ("-Wl,--print-memory-usage",
    "-Wl,--gc-sections");
    end Linker;

    package Binder renames Gnattest_Common.Binder;
    package Compiler renames Gnattest_Common.Compiler;

    package Ide renames test_demo_project.Ide;

    package GNATtest is
    for GNATTest_Mapping_File use "gnattest.xml";
    end GNATtest;

    end Test_Driver;

    它没有解决为 ada 驱动程序库生成测试用例的问题,但我可以忍受使用“--test-case-only”标志运行 gnattest,这在很大程度上实现了我的目标。

    但是当我构建项目时,它会提示“ASM_CPP”语言和断言的使用。见下文:
    gprbuild --target=arm-eabi -d -PC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_driver.gpr -XADL_BUILD_CHECKS=Enabled -XADL_BUILD=Debug -XTEST_DRIVER_BUILD_MODE=no-config-file -largs -Wl,-Map=map.txt
    test_driver.gpr:5:09: warning: there are no sources of language "ASM_CPP" in this project
    Compile
    [Ada] battery-test_data-tests.adb
    battery-test_data-tests.adb:40:13: warning: pragma Restrictions (No_Exception_Propagation) in effect
    battery-test_data-tests.adb:40:13: warning: this handler can never be entered, and has been removed
    battery-test_data-tests.adb:53:13: warning: pragma Restrictions (No_Exception_Propagation) in effect
    battery-test_data-tests.adb:53:13: warning: this handler can never be entered, and has been removed
    Bind
    [gprbind] test_runner.bexch
    [Ada] test_runner.ali
    Link
    [link] test_runner.adb
    Memory region Used Size Region Size %age Used
    flash: 21668 B 256 KB 8.27%
    ram: 3056 B 16 KB 18.65%
    [2019-12-19 08:39:18] process terminated successfully, elapsed time: 02.08s
    [2019-12-19 08:39:21] The selected rows in the Locations view cannot be exported, please select files and/or categories.

    我尝试删除“ASM_CPP”文本,警告消失了。我现在不知道要删除有关使用异常的警告。

    当我运行我的测试时,我得到了这个:
    arm-eabi-gnatemu -PC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_driver.gpr C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_runner
    [2019-12-19 08:40:01] process terminated successfully, elapsed time: 00.66s

    当我使测试失败或通过时,我得到相同的输出。关于使用异常的警告是否会导致编译器删除它们,从而破坏测试?我必须做什么才能在我的测试中允许异常(exception)?

    最佳答案

    您链接的问题是关于仅测试几个子程序,而不是一个项目中的所有源,这应该很简单:

    gnattest -Pproject.gpr



    您可以指定一个或多个特定文件:

    gnattest -Pproject.gpr file1.ads file2.ads



    刚刚 避免 -r ,你应该没问题:

    -r Consider recursively all sources from all projects

    关于ada - 如何让 gnattest 只考虑我的 src 目录中的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59364077/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com