ນີ້ແມ່ນຄໍາສັ່ງ icheck ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
icheck - ຕົວກວດສອບ C interface ABI/API
ສະຫຼຸບສັງລວມ
ກວດເບິ່ງ --canonify [[-- ພື້ນຖານ ເອກະສານ] ...] [OPTIONS] [GCC_OPTIONS] [--] ໄຟ
ກວດເບິ່ງ --ປຽບທຽບ [OPTIONS] old_file new_file
ລາຍລະອຽດ
ເຄື່ອງມືສໍາລັບການກວດສອບສະຖິຕິ C interfaces ສໍາລັບການປ່ຽນ API ແລະ ABI. ການປ່ຽນແປງທັງໝົດຕໍ່ກັບປະເພດ
ການປະກາດທີ່ສາມາດເຮັດໃຫ້ເກີດການປ່ຽນແປງ ABI ຄວນຖືກກວດພົບ, ພ້ອມກັບການປ່ຽນແປງ API ສ່ວນໃຫຍ່.
icheck ມີຈຸດປະສົງເພື່ອໃຊ້ກັບຫ້ອງສະຫມຸດ, ເປັນວິທີການປ້ອງກັນ ABI drift.
ສາມາດ
ຫຼຸດຊຸດຂອງໄຟລ໌ແຫຼ່ງໄປຫາໄຟລ໌ການໂຕ້ຕອບ canonical ດ້ວຍ --canonify, ຈາກນັ້ນປຽບທຽບ
ສອງໄຟລ໌ການໂຕ້ຕອບດັ່ງກ່າວກັບ --compare. ຖ້າມີການປ່ຽນແປງການໂຕ້ຕອບລະຫວ່າງພວກມັນ,
icheck ຈະອະທິບາຍການປ່ຽນແປງແລະລົ້ມເຫລວ.
--canonify [[-- ພື້ນຖານ ເອກະສານ] ...] [OPTIONS] [GCC_OPTIONS] [--] ໄຟ
Canonify ໄຟລ໌ລະຫັດແຫຼ່ງ (ໂດຍປົກກະຕິ .h headers) ເພື່ອປຽບທຽບໃນພາຍຫຼັງ
--ປຽບທຽບ. ປົກກະຕິແລ້ວໃຊ້ກັບ -o ທາງເລືອກທີ່ຈະບັນທຶກການສະຫຼຸບກັບໄຟລ໌.
--ປຽບທຽບ [OPTIONS] old_file new_file
ອ່ານໄຟລ໌ການໂຕ້ຕອບ canonical ສອງອັນທີ່ສ້າງຂຶ້ນດ້ວຍ --canonify ແລະປຽບທຽບ
ໂຄງສ້າງຂອງລະຫັດແຫຼ່ງຕໍ່ການປ່ຽນແປງໃນການໂຕ້ຕອບສາທາລະນະຂອງແອັບພລິເຄຊັນ
(ສ່ວນຕິດຕໍ່ນັກພັດທະນາຫຼື API) ແລະ Application Binary Interface (ABI) ເຄີຍໃຊ້
ເຊື່ອມຕໍ່ກັບໂຄງການອື່ນໆຫຼືຫ້ອງສະຫມຸດ.
OPTIONS
ໄອເຊັກ OPTIONS
-o, -- ຜົນຜະລິດ ເອກະສານ
ປ່ອຍຜົນຜະລິດໄປຫາ FILE, ແທນທີ່ຈະ stdout.
--debug N
ຖິ້ມຂໍ້ມູນການດີບັກ.
-- ເທົ່ານັ້ນ ສິ່ງທີ່
ພຽງແຕ່ປະມວນຜົນສິ່ງທີ່ໃຫ້.
--ຂ້າມ-ຈາກ ເອກະສານ
ຂ້າມສິ່ງທີ່ບໍ່ຈໍາເປັນຈາກ ເອກະສານ.
--ຂ້າມ-ຈາກ-re regexp
ຂ້າມສິ່ງທີ່ບໍ່ຈໍາເປັນຈາກໄຟລ໌ທີ່ກົງກັບການສະແດງຜົນປົກກະຕິ.
--ພຽງແຕ່-ຈາກ ເອກະສານ
ພຽງແຕ່ເອົາສິ່ງທີ່ມາຈາກ ເອກະສານ.
--only-from-re regexp
ເອົາສິ່ງທີ່ມາຈາກໄຟລ໌ທີ່ກົງກັບການສະແດງຜົນປົກກະຕິເທົ່ານັ້ນ.
GCC_OPTIONS
GCC_OPTIONS ຖືກສົ່ງຜ່ານໄປຫາ gcc -E
ຊ່ວຍເຫຼືອ OPTIONS
- ຊ່ວຍ
ສະແດງບົດສະຫຼຸບການຊ່ວຍເຫຼືອສໍາລັບ ກວດເບິ່ງ.
ຕົວຢ່າງ
ໄຟລ໌ແຫຼ່ງທັງຫມົດແມ່ນໄດ້ຖືກປຸງແຕ່ງກ່ອນດ້ວຍ gcc, ດັ່ງນັ້ນ canonify ຕ້ອງການຂໍ້ມູນດຽວກັນ
ເປັນລະຫັດແຫຼ່ງ - ປະຕິບັດຕາມ syntax ຈາກ Makefile ເພື່ອປະກອບມີທາງເລືອກ -I cpp (ຫຼື
gcc) ເພື່ອໃຫ້ຫົວທີ່ຈໍາເປັນທັງຫມົດສາມາດຕັ້ງຢູ່. ກວດເບິ່ງ ຈະເອົາລູກອອກຖ້າຕ້ອງການ
ສ່ວນຫົວບໍ່ພົບ. ແຫຼ່ງຕ້ອງລວບລວມ; icheck ບໍ່ສາມາດປະມວນຜົນໄຟລ໌ທີ່
ບໍ່ສາມາດລວບລວມໄດ້ໂດຍກົງ. ຖ້າສ່ວນຫົວຂາດ #include statements, ຫຼືຖ້າບໍ່ດັ່ງນັ້ນ
ຮຽກຮ້ອງໃຫ້ມີການນໍາໃຊ້ໃນລັກສະນະພິເສດ, ຫຼັງຈາກນັ້ນມັນບໍ່ສາມາດດໍາເນີນການໂດຍກົງກັບ icheck.
ແທນທີ່ຈະ, ຂຽນໄຟລ໌ C stub ທີ່ຕັ້ງສິ່ງຕ່າງໆໃຫ້ເຫມາະສົມແລະຫຼັງຈາກນັ້ນ #includes
header
ກວດເບິ່ງ --canonify -o ~/icheck/oldversion -I/usr/include/foo-2.0 /usr/src/bar/src/foobar.h
ກະກຽມບົດສະຫຼຸບຂອງໄຟລ໌ foobar.h ແລະໄຟລ໌ທັງຫມົດທີ່ມັນປະກອບມີ. ສະຫຼຸບແມ່ນ
ຂຽນອອກໄປຫາ ~/icheck/oldversion. ເຮັດຊ້ໍາສໍາລັບ /usr/src/bar1/src/foobar.h - ໄຟລ໌ດຽວກັນ
ໃນໄດເລກະທໍລີແຫຼ່ງທີ່ໃຫມ່ກວ່າ, ສົ່ງອອກໄປຫາໄຟລ໌ໃຫມ່, ຕົວຢ່າງ ~/icheck/ສະບັບໃໝ່.
ກວດເບິ່ງ --ປຽບທຽບ -o ~/icheck/results.txt ~/icheck/oldversion ~/icheck/ສະບັບໃໝ່
ຂຽນບົດລາຍງານການປຽບທຽບສອງເອກະສານສະຫຼຸບ. ບົດລາຍງານຊີ້ໃຫ້ເຫັນທັງຫມົດ
ການປ່ຽນແປງໃນ ABI ແລະ/ຫຼື API ທີ່ພົບເຫັນໃນລະຫວ່າງການປຽບທຽບ.
ກວດເບິ່ງ --canonify -o debian/icheck.canonical -Idebian/foo-dev/usr/ລວມ debian/foo-
dev/usr/include/foobar.h
ກວດເບິ່ງ --ປຽບທຽບ debian/icheck.manifest debian/icheck.canonical
ຖະແຫຼງການທັງສອງນີ້ລວມຢູ່ໃນ a debian/ກົດລະບຽບ ໄຟລ໌, ຈະເຮັດໃຫ້ຊຸດສ້າງ
ລົ້ມເຫລວຖ້າ API ຫຼື ABI ມີການປ່ຽນແປງໃນທາງທີ່ບໍ່ຄາດຄິດ, ບ່ອນທີ່ icheck.manifest ແມ່ນສໍາເນົາຂອງ
ການໂຕ້ຕອບທີ່ຄາດໄວ້, ລວມຢູ່ໃນຊຸດ.
ໃຫ້ສັງເກດວ່າການໂຕ້ຖຽງກັບ --compare ແມ່ນຕົວຂອງມັນເອງທີ່ຖືກຕ້ອງ C ໄຟລ໌ທີ່ຖືກປຸງແຕ່ງກ່ອນ,
ດັ່ງນັ້ນ icheck.manifest ສາມາດບັນຈຸ C preprocessor ຕາມເຫດຜົນ. ນີ້ສາມາດເປັນປະໂຫຍດໃນເວລາທີ່ຊຸດ
ສົ່ງອອກສ່ວນຕິດຕໍ່ທີ່ແຕກຕ່າງກັນໂດຍຂຶ້ນກັບສະຖາປັດຕະຍະກໍາເຈົ້າພາບ. ໃນກໍລະນີດັ່ງກ່າວນີ້, ທ່ານບໍ່ສາມາດ
ແທນທີ່ມັນດ້ວຍສໍາເນົາໃຫມ່ຂອງ icheck.canonical ເມື່ອການໂຕ້ຕອບມີການປ່ຽນແປງແລະທ່ານຕ້ອງການ
ປັບປຸງ manifest. ແທນທີ່ຈະປັບປຸງ manifest ທັງຫມົດດ້ວຍມື, ເອົາມື -
ລາຍລະອຽດການໂຕ້ຕອບລາຍລັກອັກສອນໃນຫນຶ່ງໄຟລ໌ (icheck.static-manifest) ແລະຫຼັງຈາກນັ້ນນໍາໃຊ້:
ກວດເບິ່ງ --canonify -- ພື້ນຖານ debian/icheck.static-manifest -o debian/icheck.dynamic-
manifest
ສຸດທ້າຍ, ສ້າງ icheck.manifest ທີ່ປະກອບດ້ວຍ:
#ລວມທັງ "icheck.static-manifest"
#include "icheck.dynamic-manifest"
ນີ້ອະນຸຍາດໃຫ້ທ່ານປັບປຸງບາງສ່ວນຂອງ manifest ດ້ວຍມື, ໃນຂະນະທີ່ຍັງອັດຕະໂນມັດ
ການຜະລິດສ່ວນທີ່ເຫຼືອ.
OUTPUT
icheck ສ້າງລາຍລະອຽດຍາວຂອງທຸກໆການປ່ຽນແປງ API ຫຼື ABI ທີ່ເປັນໄປໄດ້, ໂດຍອີງໃສ່ປະເພດ
ຂໍ້ມູນ. ມັນບໍ່ໄດ້ສືບສວນລະຫັດໂຄງການຕົວຈິງ, ແລະດັ່ງນັ້ນມັນກໍ່ເປັນໄປໄດ້
ການປ່ຽນແປງບາງປະເພດທີ່ມັນກວດພົບບໍ່ແມ່ນການປ່ຽນແປງ ABI ຫຼື API ຕົວຈິງ. ຢ່າງໃດກໍຕາມ, ນີ້ປົກກະຕິ
ເກີດຂຶ້ນພຽງແຕ່ໃນເວລາທີ່ລະຫັດໂຄງການໄດ້ຖືກຂຽນຢ່າງຊັດເຈນສໍາລັບມັນ. ຖ້າສົງໃສ, ຖືວ່າມັນ
ປ່ຽນແປງ.
ໃນທີ່ສຸດ, icheck ສະຫນອງບົດສະຫຼຸບຂອງການປ່ຽນແປງ. ໃຫ້ສັງເກດວ່າທິດທາງນີ້ແມ່ນ
ຂຶ້ນກັບຄໍາສັ່ງຂອງການໂຕ້ຖຽງກັບ --compare: ການໂຕ້ຕອບທີ່ເກົ່າແກ່ຕ້ອງມາກ່ອນ,
ຫຼືທິດທາງຈະເປັນທາງອື່ນ. ຄວາມຫມາຍຂອງຄໍາສັບຕ່າງໆແມ່ນເປັນ
ຕໍ່ໄປນີ້:
ABI ABI ແມ່ນເຂົ້າກັນໄດ້ຖ້າຫາກວ່າສິ່ງທີ່ລວບລວມກັບສະບັບຫນຶ່ງຂອງ
ການໂຕ້ຕອບຈະເຮັດວຽກໃນເວລາທີ່ດໍາເນີນການໂດຍໃຊ້ສະບັບອື່ນ.
API API ແມ່ນເຂົ້າກັນໄດ້ຖ້າສິ່ງທີ່ຖືກລວບລວມກັບສະບັບຫນຶ່ງຂອງ
ອິນເຕີເຟດສາມາດຖືກລວບລວມກັບຄົນອື່ນ.
forwards-ເຂົ້າກັນໄດ້
ອິນເຕີເຟດແມ່ນເຂົ້າກັນໄດ້ຕໍ່ກັບການສົ່ງຕໍ່ຖ້າສິ່ງທີ່ຖືກລວບລວມທຽບກັບແບບເກົ່າ
ຮຸ່ນຈະເຮັດວຽກກັບ ໃໝ່. ນີ້ແມ່ນລັກສະນະທີ່ສໍາຄັນສໍາລັບ ນາມສະກຸນ
ປ່ຽນແປງ.
ກັບຫຼັງ-ເຂົ້າກັນໄດ້
ການໂຕ້ຕອບແມ່ນເຂົ້າກັນໄດ້ກັບຫຼັງຖ້າສິ່ງທີ່ຖືກລວບລວມຕໍ່ກັບອັນໃຫມ່
ຮຸ່ນຈະເຮັດວຽກກັບເກົ່າ. ນີ້ແມ່ນລັກສະນະທີ່ສໍາຄັນສໍາລັບ shlibs
ສະບັບພາສາ ການປ່ຽນແປງ. ຖ້າທ່ານບໍ່ໄດ້ສ້າງແພັກເກັດ Debian, ທ່ານອາດຈະເຮັດບໍ່ໄດ້
ຫ່ວງໃຍກ່ຽວກັບການປ່ຽນແປງທີ່ບໍ່ເຂົ້າກັນໄດ້ກັບຫຼັງ.
ໃຊ້ icheck ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net