ນີ້ແມ່ນຄໍາສັ່ງ abidiff ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
abidiff - ປຽບທຽບ ABIs ຂອງໄຟລ໌ ELF
abidiff ປຽບທຽບ Application Binary Interfaces (ABI) ຂອງສອງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນໃນ ELF
ຮູບແບບ. ມັນປ່ອຍບົດລາຍງານທີ່ມີຄວາມຫມາຍທີ່ອະທິບາຍຄວາມແຕກຕ່າງລະຫວ່າງສອງ ABIs.
ສໍາລັບບົດລາຍງານການປ່ຽນແປງ ABI ທີ່ສົມບູນແບບທີ່ປະກອບມີການປ່ຽນແປງກ່ຽວກັບຫນ້າທີ່ແລະຕົວແປ
ປະເພດຍ່ອຍ, ສອງຫ້ອງສະຫມຸດທີ່ແບ່ງປັນການປ້ອນຂໍ້ມູນຈະຕ້ອງມາພ້ອມກັບຂໍ້ມູນດີບັກຂອງເຂົາເຈົ້າ
in DWARF ຮູບແບບ. ຖ້າບໍ່ດັ່ງນັ້ນ, ເທົ່ານັ້ນ ELF ສັນຍາລັກທີ່ຖືກເພີ່ມຫຼືເອົາອອກໄດ້ຖືກລາຍງານ.
ການຮຽກຮ້ອງ
abidiff [ທາງເລືອກ]
OPTIONS
· - ຊ່ວຍ | -h
ສະແດງການຊ່ວຍເຫຼືອສັ້ນໆກ່ຽວກັບຄໍາສັ່ງແລະອອກ.
· - ການປ່ຽນແປງ | -v
ສະແດງສະບັບຂອງໂຄງການແລະອອກ.
· --debug-info-dir1 | --d1 <di-path1>
ສໍາລັບກໍລະນີທີ່ຂໍ້ມູນ debug ສໍາລັບ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແບ່ງອອກເປັນ
ໄຟລ໌ແຍກຕ່າງຫາກ, ບອກ Abidiff ບ່ອນທີ່ຈະຊອກຫາໄຟລ໌ຂໍ້ມູນ debug ແຍກຕ່າງຫາກນັ້ນ.
ໃຫ້ສັງເກດວ່າ di-ເສັ້ນທາງ ຕ້ອງຊີ້ໄປຫາໄດເລກະທໍລີຮາກທີ່ຂໍ້ມູນດີບັກ
ຖືກຈັດຢູ່ໃນລັກສະນະຄ້າຍຄືຕົ້ນໄມ້. ພາຍໃຕ້ລະບົບ Red Hat, ໄດເລກະທໍລີນັ້ນແມ່ນ
ປົກກະຕິແລ້ວ /usr/lib/debug.
ຈົ່ງຈື່ໄວ້ວ່າທາງເລືອກນີ້ບໍ່ຈໍາເປັນສໍາລັບການແບ່ງປັນຂໍ້ມູນດີບັກທີ່ຕິດຕັ້ງໂດຍ
ຜູ້ຈັດການຊຸດຂອງລະບົບຂອງເຈົ້າເພາະວ່າຫຼັງຈາກນັ້ນ Abidiff ຮູ້ບ່ອນທີ່ຈະຊອກຫາມັນ.
· --debug-info-dir2 | --d2 <di-path2>
ຄື --debug-info-dir1, ທາງເລືອກນີ້ບອກ Abidiff ບ່ອນທີ່ຈະຊອກຫາ debug ການແບ່ງປັນ
ຂໍ້ມູນສໍາລັບການ ຫ້ອງສະໝຸດທີ່ສອງ ຍື່ນ.
· --ສະຖິຕິ
ແທນທີ່ຈະສະແດງຄວາມແຕກຕ່າງ ABI ລະອຽດລະຫວ່າງ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ
ຫ້ອງສະໝຸດທີ່ສອງ, ພຽງແຕ່ສະແດງສະຖິຕິສະຫຼຸບບາງຢ່າງກ່ຽວກັບຄວາມແຕກຕ່າງເຫຼົ່ານີ້.
· --symtabs
ພຽງແຕ່ສະແດງຕາຕະລາງສັນຍາລັກຂອງ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ ຫ້ອງສະໝຸດທີ່ສອງ.
· --deleted-fns
ໃນບົດລາຍງານຜົນໄດ້ຮັບກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ
ຫ້ອງສະໝຸດທີ່ສອງ, ພຽງແຕ່ສະແດງຫນ້າທີ່ກໍານົດທົ່ວໂລກທີ່ຖືກລຶບຖິ້ມ
ຈາກ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ.
· --changed-fns
ໃນບົດລາຍງານຜົນໄດ້ຮັບກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ
ຫ້ອງສະໝຸດທີ່ສອງ, ພຽງແຕ່ສະແດງການປ່ຽນແປງໃນປະເພດຍ່ອຍຂອງຫນ້າທີ່ທົ່ວໂລກ
ກຳ ນົດໃນ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ.
· --added-fns
ໃນບົດລາຍງານຜົນໄດ້ຮັບກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ
ຫ້ອງສະໝຸດທີ່ສອງ, ພຽງແຕ່ສະແດງຫນ້າທີ່ກໍານົດທົ່ວໂລກທີ່ຖືກເພີ່ມໃສ່
ຫ້ອງສະໝຸດທີ່ສອງ.
· --deleted-vars
ໃນບົດລາຍງານຜົນໄດ້ຮັບກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ
ຫ້ອງສະໝຸດທີ່ສອງ, ພຽງແຕ່ສະແດງຕົວແປທີ່ກໍານົດທົ່ວໂລກທີ່ຖືກລຶບຖິ້ມ
ຈາກ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ.
· --changed-vars
ໃນບົດລາຍງານຜົນໄດ້ຮັບກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ
ຫ້ອງສະໝຸດທີ່ສອງ, ພຽງແຕ່ສະແດງການປ່ຽນແປງໃນປະເພດຍ່ອຍຂອງໂລກ
ຕົວແປທີ່ກໍານົດໃນ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ
· --added-vars
ໃນບົດລາຍງານຜົນໄດ້ຮັບກ່ຽວກັບຄວາມແຕກຕ່າງລະຫວ່າງ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ
ຫ້ອງສະໝຸດທີ່ສອງ, ພຽງແຕ່ສະແດງຕົວແປທົ່ວໂລກທີ່ຖືກເພີ່ມ (ກໍານົດ) ໃສ່
ຫ້ອງສະໝຸດທີ່ສອງ.
· --no-linkage-name
ໃນບົດລາຍງານຜົນໄດ້ຮັບ, ບໍ່ສະແດງຊື່ການເຊື່ອມໂຍງຂອງການເພີ່ມ, ໂຍກຍ້າຍ, ຫຼື
ການປ່ຽນແປງຫນ້າທີ່ຫຼືຕົວແປ.
· --no-show-locs
ຢ່າສະແດງຂໍ້ມູນກ່ຽວກັບບ່ອນທີ່ຢູ່ໃນ ຄັ້ງທີສອງ ແບ່ງປັນ ຫ້ອງສະຫມຸດ ທີ່ກ່ຽວຂ້ອງ
ປະເພດຖືກປ່ຽນແປງ.
· --no-unreferenced-ສັນຍາລັກ
ໃນບົດລາຍງານຜົນໄດ້ຮັບ, ບໍ່ສະແດງຂໍ້ມູນການປ່ຽນແປງກ່ຽວກັບຫນ້າທີ່ແລະ
ສັນຍາລັກຕົວປ່ຽນແປງທີ່ບໍ່ໄດ້ອ້າງອີງໂດຍຂໍ້ມູນດີບັກໃດຫນຶ່ງ. ໃຫ້ສັງເກດວ່າສໍາລັບ
ສັນຍາລັກເຫຼົ່ານີ້ບໍ່ໄດ້ອ້າງອີງໂດຍຂໍ້ມູນ debug ໃດ, ຂໍ້ມູນການປ່ຽນແປງ
ສັນຍາລັກທີ່ສະແດງອອກແມ່ນເພີ່ມຫຼືລົບອອກ.
· -- ການສະກັດກັ້ນ | --suppr <ເສັ້ນທາງໄປສູ່ການສະກັດກັ້ນ>
ໃຊ້ໄຟລ໌ສະເພາະການສະກັດກັ້ນທີ່ຕັ້ງຢູ່ ເສັ້ນທາງໄປສູ່ການສະກັດກັ້ນ. ໃຫ້ສັງເກດວ່ານີ້
ທາງເລືອກສາມາດປາກົດຫຼາຍຄັ້ງໃນເສັ້ນຄໍາສັ່ງ; ການສະກັດກັ້ນທັງຫມົດ
ຫຼັງຈາກນັ້ນ, ໄຟລ໌ສະເພາະແມ່ນຖືກພິຈາລະນາ.
· -- ລຸດລົງ <regex>
ໃນເວລາອ່ານ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ ຫ້ອງສະໝຸດທີ່ສອງ ໄຟລ໌ປ້ອນຂໍ້ມູນ ELF, ວາງ
ຫນ້າທີ່ກໍານົດທົ່ວໂລກແລະຕົວແປທີ່ຊື່ກົງກັບການສະແດງຜົນປົກກະຕິ
regex. ດັ່ງນັ້ນ, ບໍ່ມີການປ່ຽນແປງທີ່ກ່ຽວຂ້ອງກັບຫນ້າທີ່ຫຼືຕົວແປເຫຼົ່ານີ້ຈະຖືກປ່ອຍອອກມາ
ໃນບົດລາຍງານຄວາມແຕກຕ່າງ.
· --drop-fn <regex>
ໃນເວລາອ່ານ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ ຫ້ອງສະໝຸດທີ່ສອງ ໄຟລ໌ປ້ອນຂໍ້ມູນ ELF, ວາງ
ຫນ້າທີ່ກໍານົດທົ່ວໂລກທີ່ຊື່ກົງກັບການສະແດງຜົນປົກກະຕິ regexທີ່ຢູ່ ໃນຖານະເປັນ
ຜົນໄດ້ຮັບ, ບໍ່ມີການປ່ຽນແປງທີ່ກ່ຽວຂ້ອງກັບຫນ້າທີ່ເຫຼົ່ານີ້ຈະຖືກປ່ອຍອອກມາໃນບົດລາຍງານຄວາມແຕກຕ່າງ.
· --drop-var <regex>
ໃນເວລາອ່ານ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ ຫ້ອງສະໝຸດທີ່ສອງ ໄຟລ໌ປ້ອນຂໍ້ມູນ ELF, ວາງ
ຕົວແປທີ່ກຳນົດໄວ້ທົ່ວໂລກທີ່ກົງກັບການສະແດງຜົນປົກກະຕິ regex.
· --ຮັກສາ <regex>
ໃນເວລາອ່ານ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ ຫ້ອງສະໝຸດທີ່ສອງ ໄຟລ໌ປ້ອນຂໍ້ມູນ ELF, ຮັກສາ
ຫນ້າທີ່ກໍານົດທົ່ວໂລກແລະຕົວແປທີ່ຊື່ກົງກັບການສະແດງຜົນປົກກະຕິ
regex. ຫນ້າທີ່ແລະຕົວແປອື່ນໆທັງຫມົດແມ່ນຫຼຸດລົງຢູ່ເທິງພື້ນແລະດັ່ງນັ້ນຈະບໍ່
ປະກົດຢູ່ໃນບົດລາຍງານຄວາມແຕກຕ່າງຜົນໄດ້ຮັບ.
· --keep-fn <regex>
ໃນເວລາອ່ານ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ ຫ້ອງສະໝຸດທີ່ສອງ ໄຟລ໌ປ້ອນຂໍ້ມູນ ELF, ຮັກສາ
ຫນ້າທີ່ກໍານົດທົ່ວໂລກທີ່ຊື່ກົງກັບການສະແດງຜົນປົກກະຕິ regexທີ່ຢູ່ ທັງຫມົດ
ຫນ້າທີ່ອື່ນໆແມ່ນໄດ້ຫຼຸດລົງຢູ່ໃນພື້ນເຮືອນແລະດັ່ງນັ້ນຈະບໍ່ປາກົດຢູ່ໃນຜົນໄດ້ຮັບ
ລາຍງານຄວາມແຕກຕ່າງ.
· --keep-var <regex>
ໃນເວລາອ່ານ ຫໍສະໝຸດທີ່ແບ່ງປັນທຳອິດ ແລະ ຫ້ອງສະໝຸດທີ່ສອງ ໄຟລ໌ປ້ອນຂໍ້ມູນ ELF, ຮັກສາ
ທົ່ວໂລກກໍານົດວ່າຊື່ໃດກົງກັບການສະແດງຜົນປົກກະຕິ regex. ອື່ນໆທັງ ໝົດ
ຕົວແປຖືກຫຼຸດລົງຢູ່ເທິງພື້ນແລະດັ່ງນັ້ນຈະບໍ່ປາກົດຢູ່ໃນຄວາມແຕກຕ່າງຜົນໄດ້ຮັບ
ລາຍງານ
· --ບໍ່ເປັນອັນຕະລາຍ
ໃນບົດລາຍງານຄວາມແຕກຕ່າງ, ສະແດງພຽງແຕ່ການປ່ຽນແປງທີ່ບໍ່ມີອັນຕະລາຍ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ບໍ່ເປັນອັນຕະລາຍ
ການປ່ຽນແປງໄດ້ຖືກກັ່ນຕອງອອກຈາກບົດລາຍງານຄວາມແຕກຕ່າງຮັກສາຄວາມຫຍຸ້ງຍາກໃນຕໍາ່ສຸດທີ່ແລະມີ
ການປ່ຽນແປງຫຼາຍກວ່າເກົ່າເພື່ອຈຸດບັນຫາ ABI ທີ່ແທ້ຈິງ.
· --ບໍ່ເປັນອັນຕະລາຍ
ໃນບົດລາຍງານຄວາມແຕກຕ່າງ, ຢ່າສະແດງການປ່ຽນແປງທີ່ເປັນອັນຕະລາຍ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ພຽງແຕ່ເປັນອັນຕະລາຍ
ການປ່ຽນແປງແມ່ນສະແດງໃຫ້ເຫັນໃນລາຍງານຄວາມແຕກຕ່າງ.
· --ຊ້ຳຊ້ອນ
ໃນບົດລາຍງານຄວາມແຕກຕ່າງ, ສະແດງການປ່ຽນແປງທີ່ຊ້ໍາກັນ. ການປ່ຽນແປງຊໍ້າຊ້ອນແມ່ນການປ່ຽນແປງ
ທີ່ໄດ້ຖືກສະແດງຢູ່ບ່ອນອື່ນໃນບົດລາຍງານ.
· -- ບໍ່ຊໍ້າຊ້ອນ
ໃນບົດລາຍງານຄວາມແຕກຕ່າງ, ເຮັດ ບໍ່ ສະແດງການປ່ຽນແປງຊໍ້າຊ້ອນ. ການປ່ຽນແປງຊໍ້າຊ້ອນແມ່ນການປ່ຽນແປງ
ທີ່ໄດ້ຖືກສະແດງຢູ່ບ່ອນອື່ນໃນບົດລາຍງານ. ຕົວເລືອກນີ້ຖືກເປີດໂດຍ
Default
· -- ບໍ່ມີສະຖາປັດຕະຍະກໍາ
ຢ່າເອົາສະຖາປັດຕະຍະກໍາເຂົ້າໃນບັນຊີເມື່ອປຽບທຽບ ABIs.
· --dump-diff-tree
ຫຼັງຈາກບົດລາຍງານຄວາມແຕກຕ່າງກັນ, ປ່ອຍຕົວສະແດງຂໍ້ຄວາມຂອງ diff nodes tree ທີ່ໃຊ້ໂດຍ
ເຄື່ອງຈັກປຽບທຽບເພື່ອເປັນຕົວແທນຂອງຫນ້າທີ່ປ່ຽນແປງແລະຕົວແປ. ນັ້ນ
ການເປັນຕົວແທນຖືກປ່ອຍອອກມາໃຫ້ເກີດຄວາມຜິດພາດເພື່ອຈຸດປະສົງການດີບັກ. ໃຫ້ສັງເກດວ່າ
ຕົ້ນໄມ້ທີ່ແຕກຕ່າງນີ້ແມ່ນກ່ຽວຂ້ອງກັບໜ້າທີ່ ແລະຕົວແປທີ່ມີບາງປະເພດຍ່ອຍເທົ່ານັ້ນ
ການປ່ຽນແປງ. ຟັງຊັນທີ່ເພີ່ມ ຫຼືລຶບອອກ ແລະຕົວແປບໍ່ມີຕົ້ນໄມ້ຂໍ້ແຕກຕ່າງໃດໆ
ທີ່ກ່ຽວຂ້ອງກັບເຂົາເຈົ້າ.
· --ສະຖິຕິ
ປ່ອຍສະຖິຕິກ່ຽວກັບສິ່ງຕ່າງໆພາຍໃນ.
· -- verbose
ປ່ອຍບັນທຶກ verbose ກ່ຽວກັບຄວາມຄືບຫນ້າຂອງສິ່ງຕ່າງໆພາຍໃນອື່ນໆ.
ກັບຄືນ VALUES
ລະຫັດທາງອອກຂອງ Abidiff ຄໍາສັ່ງແມ່ນ 0 ຖ້າ ABI ຂອງ binaries ຖືກປຽບທຽບ
ເທົ່າກັບ, ຫຼືບໍ່ແມ່ນສູນຖ້າພວກມັນແຕກຕ່າງກັນຫຼືຖ້າເຄື່ອງມືພົບຂໍ້ຜິດພາດ.
ໃນກໍລະນີຕໍ່ມາ, ລະຫັດອອກແມ່ນ 8-bits-wide bit field ທີ່ແຕ່ລະ bit ມີ a
ຄວາມຫມາຍສະເພາະ.
ບິດທຳອິດຂອງຄ່າ 1, ຊື່ ABIDIFF_ERROR ຫມາຍຄວາມວ່າມີຄວາມຜິດພາດ.
ບິດທີສອງ, ຂອງມູນຄ່າ 2, ຊື່ ABIDIFF_USAGE_ERROR ຫມາຍຄວາມວ່າມີຄວາມຜິດພາດໃນວິທີການ
ຜູ້ໃຊ້ໄດ້ຮຽກຮ້ອງເຄື່ອງມື. ມັນອາດຈະຖືກກໍານົດ, ຕົວຢ່າງ, ຖ້າຜູ້ໃຊ້ຮຽກຮ້ອງເຄື່ອງມື
ດ້ວຍການປ່ຽນເສັ້ນຄໍາສັ່ງທີ່ບໍ່ຮູ້ຈັກ, ມີຕົວເລກຜິດ ຫຼື argument, ແລະອື່ນໆ ຖ້າບິດນີ້ແມ່ນ
ຕັ້ງ, ຈາກນັ້ນ ABIDIFF_ERROR bit ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າເຊັ່ນດຽວກັນ.
ບິດທີສາມ, ຂອງມູນຄ່າ 4, ຊື່ ABIDIFF_ABI_CHANGE ຫມາຍຄວາມວ່າ ABI ຂອງ binaries ເປັນ
ປຽບທຽບແມ່ນແຕກຕ່າງກັນ.
ບິດທີສີ່, ຂອງມູນຄ່າ 8, ຊື່ ABIDIFF_ABI_INCOMPATIBLE_CHANGE ຫມາຍຄວາມວ່າ ABI ຂອງ
binaries ປຽບທຽບແມ່ນແຕກຕ່າງກັນໃນທາງທີ່ບໍ່ເຂົ້າກັນໄດ້. ຖ້າບິດນີ້ຖືກຕັ້ງ, ຫຼັງຈາກນັ້ນ
ABIDIFF_ABI_CHANGE bit ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າເຊັ່ນດຽວກັນ. ຖ້າ ABIDIFF_ABI_CHANGE ຖືກກໍານົດແລະ
ABIDIFF_INCOMPATIBLE_CHANGE is ບໍ່ ກໍານົດ, ຫຼັງຈາກນັ້ນມັນຫມາຍຄວາມວ່າ ABIs ທີ່ຖືກປຽບທຽບອາດຈະ
ຫຼືອາດຈະບໍ່ເຂົ້າກັນໄດ້. ໃນກໍລະນີດັ່ງກ່າວ, ມະນຸດຕ້ອງທົບທວນຄືນການປ່ຽນແປງ ABI
ເພື່ອຕັດສິນໃຈວ່າພວກມັນເຂົ້າກັນໄດ້ຫຼືບໍ່.
ບິດທີ່ຍັງເຫຼືອບໍ່ໄດ້ຖືກນໍາໃຊ້ສໍາລັບປັດຈຸບັນ.
ການນໍາໃຊ້ ຕົວຢ່າງ
1. ການກວດສອບການປ່ຽນແປງໃນປະເພດຍ່ອຍຂອງຟັງຊັນ:
$ cat -n test-v0.cc
1 // ລວບລວມຂໍ້ມູນນີ້ດ້ວຍ:
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 ໂຄງສ້າງ S0
5 {
6 int m0;
7 };
8
9 ຫວ່າງເປົ່າ
10 foo(S0* /*parameter_name*/)
11 {
12 // ເຮັດບາງສິ່ງບາງຢ່າງທີ່ມີ parameter_name.
13 }
$
$ cat -n test-v1.cc
1 // ລວບລວມຂໍ້ມູນນີ້ດ້ວຍ:
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 ໂຄງສ້າງ type_base
5 {
6 int ໃສ່;
7 };
8
9 ໂຄງສ້າງ S0 : public type_base
10 {
11 int m0;
12 };
13
14 ຫວ່າງເປົ່າ
15 foo(S0* /*parameter_name*/)
16 {
17 // ເຮັດບາງສິ່ງບາງຢ່າງທີ່ມີ parameter_name.
18 }
$
$g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
ຟັງຊັນການປ່ຽນແປງສະຫຼຸບ: 0 ລົບອອກ, 1 ປ່ຽນແປງ, 0 ເພີ່ມຟັງຊັນ
ສະຫຼຸບການປ່ຽນແປງຕົວແປ: 0 ລົບອອກ, 0 ປ່ຽນແປງ, 0 ເພີ່ມຕົວແປ
1 ຟັງຊັນທີ່ມີການປ່ຽນແປງບາງປະເພດຍ່ອຍທາງອ້ອມ:
[C] 'function void foo(S0*)' ມີການປ່ຽນແປງບາງປະເພດຍ່ອຍທາງອ້ອມ:
ພາຣາມິເຕີ 0 ຂອງປະເພດ 'S0*' ມີການປ່ຽນແປງປະເພດຍ່ອຍ:
ໃນຈຸດທີ່ພິມ 'struct S0':
ຂະຫນາດປ່ຽນຈາກ 32 ຫາ 64 bits
1 ການໃສ່ຊັ້ນພື້ນຖານ:
ໂຄງສ້າງ type_base
1 ການປ່ຽນແປງສະມາຊິກຂໍ້ມູນ:
'int S0::m0' ຊົດເຊີຍປ່ຽນຈາກ 0 ຫາ 32
$
2. ກວດພົບການປ່ຽນແປງອື່ນໃນປະເພດຍ່ອຍຂອງຟັງຊັນ:
$ cat -n test-v0.cc
1 // ລວບລວມຂໍ້ມູນນີ້ດ້ວຍ:
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 ໂຄງສ້າງ S0
5 {
6 int m0;
7 };
8
9 ຫວ່າງເປົ່າ
10 foo(S0& /*parameter_name*/)
11 {
12 // ເຮັດບາງສິ່ງບາງຢ່າງທີ່ມີ parameter_name.
13 }
$
$ cat -n test-v1.cc
1 // ລວບລວມຂໍ້ມູນນີ້ດ້ວຍ:
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 ໂຄງສ້າງ S0
5 {
6 char inserted_member;
7 int m0;
8 };
9
10 ຫວ່າງເປົ່າ
11 foo(S0& /*parameter_name*/)
12 {
13 // ເຮັດບາງສິ່ງບາງຢ່າງທີ່ມີ parameter_name.
14 }
$
$g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
ຟັງຊັນການປ່ຽນແປງສະຫຼຸບ: 0 ລົບອອກ, 1 ປ່ຽນແປງ, 0 ເພີ່ມຟັງຊັນ
ສະຫຼຸບການປ່ຽນແປງຕົວແປ: 0 ລົບອອກ, 0 ປ່ຽນແປງ, 0 ເພີ່ມຕົວແປ
1 ຟັງຊັນທີ່ມີການປ່ຽນແປງບາງປະເພດຍ່ອຍທາງອ້ອມ:
[C] 'function void foo(S0&)' ມີການປ່ຽນແປງບາງປະເພດຍ່ອຍທາງອ້ອມ:
ພາຣາມິເຕີ 0 ຂອງປະເພດ 'S0&' ມີການປ່ຽນແປງປະເພດຍ່ອຍ:
ໃນປະເພດອ້າງອີງ 'struct S0':
ຂະຫນາດປ່ຽນຈາກ 32 ຫາ 64 bits
1 ການແຊກສະມາຊິກຂໍ້ມູນ:
'char S0::inserted_member', ດ້ວຍຄ່າຊົດເຊີຍ 0 (ເປັນບິດ)
1 ການປ່ຽນແປງສະມາຊິກຂໍ້ມູນ:
'int S0::m0' ຊົດເຊີຍປ່ຽນຈາກ 0 ຫາ 32
$
3. ການກວດພົບວ່າຫນ້າທີ່ໄດ້ຮັບການໂຍກຍ້າຍອອກຫຼືເພີ່ມເຂົ້າໄປໃນຫ້ອງສະຫມຸດ:
$ cat -n test-v0.cc
1 // ລວບລວມຂໍ້ມູນນີ້ດ້ວຍ:
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 ໂຄງສ້າງ S0
5 {
6 int m0;
7 };
8
9 ຫວ່າງເປົ່າ
10 foo(S0& /*parameter_name*/)
11 {
12 // ເຮັດບາງສິ່ງບາງຢ່າງທີ່ມີ parameter_name.
13 }
$
$ cat -n test-v1.cc
1 // ລວບລວມຂໍ້ມູນນີ້ດ້ວຍ:
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 ໂຄງສ້າງ S0
5 {
6 char inserted_member;
7 int m0;
8 };
9
10 ຫວ່າງເປົ່າ
11 bar(S0& /*parameter_name*/)
12 {
13 // ເຮັດບາງສິ່ງບາງຢ່າງທີ່ມີ parameter_name.
14 }
$
$g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
ສັງລວມການປ່ຽນແປງຟັງຊັນ: 1 ຖອດອອກ, 0 ປ່ຽນແປງ, 1 ຟັງຊັນເພີ່ມ
ສະຫຼຸບການປ່ຽນແປງຕົວແປ: 0 ລົບອອກ, 0 ປ່ຽນແປງ, 0 ເພີ່ມຕົວແປ
1 ການທໍາງານທີ່ລົບອອກ:
'ຟັງຊັນ void foo(S0&)' {_Z3fooR2S0}
1 ຫນ້າທີ່ເພີ່ມ:
'function void bar(S0&)' {_Z3barR2S0}
$
ໃຊ້ abidiff ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net