{"id":3228,"date":"2019-09-05T11:08:56","date_gmt":"2019-09-05T11:08:56","guid":{"rendered":"https:\/\/tridenstechnology.com\/?p=3228"},"modified":"2022-03-01T15:10:30","modified_gmt":"2022-03-01T15:10:30","slug":"oracle-brm-policy-opcode-custom-code-debugging-via-gdb","status":"publish","type":"post","link":"https:\/\/tridenstechnology.com\/pl\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","title":{"rendered":"Debugowanie kodu niestandardowego Oracle BRM Policy Opcode za po\u015brednictwem GDB"},"content":{"rendered":"<p>Je\u015bli chcemy produkowa\u0107 wysokiej jako\u015bci nasze <a href=\"https:\/\/tridenstechnology.com\/oracle-brm\/\">Oracle BRM<\/a> oprogramowanie, musimy spe\u0142ni\u0107 pewne wymagania dotycz\u0105ce naszego procesu rozwoju. Szczeg\u00f3lnie wa\u017cne jest w\u0142\u0105czenie dobrych technik testowania i debugowania do naszego procesu rozwoju.<br>Testowanie to proces wyszukiwania b\u0142\u0119d\u00f3w w oprogramowaniu, kt\u00f3ry jest wykonywany r\u0119cznie przez testera lub mo\u017ce by\u0107 zautomatyzowany.<br><a href=\"https:\/\/en.wikipedia.org\/wiki\/Debugging\">Debugowanie<\/a> to proces znajdowania i rozwi\u0105zywania defekt\u00f3w lub problem\u00f3w w programie komputerowym, kt\u00f3re uniemo\u017cliwiaj\u0105 prawid\u0142owe dzia\u0142anie oprogramowania komputerowego lub systemu. Zasadniczo jest to proces naprawiania b\u0142\u0119d\u00f3w znalezionych w fazie testowania. Programista lub deweloper jest odpowiedzialny za debugowanie i nie mo\u017cna go zautomatyzowa\u0107.<\/p>\n\n\n\n<div class=\"wp-block-yoast-seo-table-of-contents yoast-table-of-contents\"><h2>Spis tre\u015bci<\/h2><ul><li><a href=\"#h-debugging-oracle-brm-policy-opcodes-custom-code\" data-level=\"2\">Debugowanie niestandardowego kodu operacyjnego polityki Oracle BRM<\/a><\/li><li><a href=\"#h-debugging-in-practice\" data-level=\"2\">Debugowanie w praktyce<\/a><\/li><\/ul><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-debugging-oracle-brm-policy-opcodes-custom-code\">Debugowanie niestandardowego kodu operacyjnego polityki Oracle BRM<\/h2>\n\n\n\n<p>Podczas dostosowywania kod\u00f3w operacyjnych polityki w <a href=\"https:\/\/tridenstechnology.com\/oracle-brm\/\">Oracle BRM<\/a> Cz\u0119sto zachodzi potrzeba debugowania kodu w celu znalezienia potencjalnych b\u0142\u0119d\u00f3w lub przeanalizowania zachowania kodu. Niekt\u00f3re podstawowe analizy mo\u017cna wykona\u0107 za pomoc\u0105 rejestrowania niekt\u00f3rych komunikat\u00f3w debugowania i analizowania dziennik\u00f3w, ale znacznie bardziej zaawansowan\u0105 i pot\u0119\u017cn\u0105 metod\u0105 jest u\u017cycie oddzielnego narz\u0119dzia - debuggera. W tym artykule przyjrzymy si\u0119, w jaki spos\u00f3b mo\u017cemy u\u017cy\u0107 debuggera GDB do debugowania procesu cm Oracle BRM, kt\u00f3ry wykonuje r\u00f3wnie\u017c niestandardowy kod (patrz rysunek poni\u017cej).<\/p>\n\n\n\n<div class=\"wp-block-image dt-pswp-item\"><figure class=\"aligncenter\"><a class=\"dt-pswp-item\" href=\"https:\/\/tridenstechnology.com\/wp-content\/uploads\/2019\/09\/Debugging-Oracle-BRM-CM-GDB.png\"><img fetchpriority=\"high\" decoding=\"async\" width=\"593\" height=\"266\" src=\"https:\/\/tridenstechnology.com\/wp-content\/uploads\/2019\/09\/Debugging-Oracle-BRM-CM-GDB.png\" alt=\"Debugowanie Oracle BRM CM za pomoc\u0105 GDB\" class=\"wp-image-3230\" srcset=\"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Debugging-Oracle-BRM-CM-GDB.png 593w, https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Debugging-Oracle-BRM-CM-GDB-300x135.png 300w\" sizes=\"(max-width: 593px) 100vw, 593px\" \/><\/a><figcaption>Schematyczny przegl\u0105d debugowania Oracle BRM CM przy u\u017cyciu GDB<\/figcaption><\/figure><\/div>\n\n\n\n<p><a href=\"https:\/\/www.gnu.org\/software\/gdb\/\">GDB<\/a> to debugger o otwartym kodzie \u017ar\u00f3d\u0142owym, kt\u00f3ry zapewnia wiele zaawansowanych i pot\u0119\u017cnych narz\u0119dzi do analizy i debugowania naszego kodu. Niekt\u00f3re z podstawowych funkcji GDB to punkty przerwania (warunkowe \/ bezwarunkowe), zegarki, \u015blady wsteczne i przyrostowe wykonywanie kodu. Oczywi\u015bcie mo\u017cna r\u00f3wnie\u017c przegl\u0105da\u0107 i modyfikowa\u0107 warto\u015bci zmiennych oraz wywo\u0142ywa\u0107 r\u00f3\u017cne funkcje. Przyjrzyjmy si\u0119 teraz, jak w praktyce u\u017cywamy GDB z procesem cm.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-debugging-in-practice\">Debugowanie w praktyce<\/h2>\n\n\n\n<p>Najpierw musimy uzyska\u0107 PID naszego procesu CM:<\/p>\n\n\n\n<p><em>ps x<\/em><\/p>\n\n\n\n<p>Prosz\u0119 znale\u017a\u0107 PID procesu CM i u\u017cy\u0107 go do po\u0142\u0105czenia si\u0119 z tym procesem za pomoc\u0105 GDB:<\/p>\n\n\n\n<p>gdb cm<\/p>\n\n\n\n<p>Teraz otwiera si\u0119 pow\u0142oka GDB, w kt\u00f3rej mo\u017cemy wykonywa\u0107 r\u00f3\u017cne polecenia obs\u0142ugiwane przez GDB. Ka\u017cde nowe po\u0142\u0105czenie nawi\u0105zane z CM powoduje odrodzenie nowego procesu potomnego CM z macierzystego CM. Chcemy, aby GDB \u015bledzi\u0142 r\u00f3wnie\u017c takie procesy potomne. Prosz\u0119 wykona\u0107 nast\u0119puj\u0105ce polecenie w pow\u0142oce GDB:<\/p>\n\n\n\n<p>(gdb) set follow-fork-mode child<\/p>\n\n\n\n<p>W zale\u017cno\u015bci od potrzeb mog\u0105 Pa\u0144stwo r\u00f3wnie\u017c chcie\u0107 zbada\u0107 polecenia set detach-on-fork i attach. Teraz ustawmy punkt przerwania na implementacj\u0119 kodu operacyjnego polityki, jak w poni\u017cszym przyk\u0142adzie:<\/p>\n\n\n\n<p>(gdb) break fm_act_pol_post_reauthorize.c:192<\/p>\n\n\n\n<p>Gdy teraz uruchomimy wykonywanie kodu polityki, zostanie ono przerwane przez breakpoint (lub nawet wcze\u015bniej powiadomi nas, \u017ce pojawi\u0142o si\u0119 nowe dziecko). Nast\u0119pnie mo\u017cemy \u015bledzi\u0107 przep\u0142yw kodu krok po kroku za pomoc\u0105 polece\u0144 next (abbr. n) lub step. Je\u015bli interesuje nas jaka\u015b warto\u015b\u0107 zmiennej, mo\u017cemy j\u0105 wypisa\u0107 za pomoc\u0105:<\/p>\n\n\n\n<p>print<\/p>\n\n\n\n<div class=\"wp-block-image dt-pswp-item\"><figure class=\"aligncenter\"><a class=\"dt-pswp-item\" href=\"https:\/\/tridenstechnology.com\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example.png\"><img decoding=\"async\" width=\"840\" height=\"413\" src=\"https:\/\/tridenstechnology.com\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example.png\" alt=\"Przyk\u0142ad debugowania procesu Oracle BRM CM\" class=\"wp-image-3239\" srcset=\"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example.png 840w, https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example-300x148.png 300w, https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example-768x378.png 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/a><figcaption>Przyk\u0142ad u\u017cycia GDB do debugowania procesu Oracle BRM CM<\/figcaption><\/figure><\/div>\n\n\n\n<p>Do Pa\u0144stwa dyspozycji jest r\u00f3wnie\u017c wiele bardziej zaawansowanych i pot\u0119\u017cnych funkcji, kt\u00f3re zosta\u0142y szczeg\u00f3\u0142owo opisane w dokumentacji GDB i zintegrowanej pomocy. Zach\u0119camy do zapoznania si\u0119 z nimi i sprawdzenia, w jaki spos\u00f3b mog\u0105 one Pa\u0144stwu pom\u00f3c.<\/p>","protected":false},"excerpt":{"rendered":"<p>If we want to produce a high-quality of our Oracle BRM software, we must meet some requirements regarding our development process. It is especially important to incorporate good testing and debugging techniques in our development process.Testing is a process of finding bugs or errors in a software product that is done manually by a tester&hellip;<\/p>","protected":false},"author":1,"featured_media":3165,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-3228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle-billing","category-38","description-off"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.5 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oracle BRM Policy Opcode Custom Code Debugging via GDB<\/title>\n<meta name=\"description\" content=\"An article about debugging Oracle Billing and Revenue Management (Oracle BRM) policy opcodes custom code using external debugger GDB.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tridenstechnology.com\/pl\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle BRM Policy Opcode Custom Code Debugging via GDB\" \/>\n<meta property=\"og:description\" content=\"An article about debugging Oracle Billing and Revenue Management (Oracle BRM) policy opcodes custom code using external debugger GDB.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tridenstechnology.com\/pl\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/\" \/>\n<meta property=\"og:site_name\" content=\"Tridens\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/tridenstechnology\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-05T11:08:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-01T15:10:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1734\" \/>\n\t<meta property=\"og:image:height\" content=\"1156\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ale\u0161\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TridensTech\" \/>\n<meta name=\"twitter:site\" content=\"@TridensTech\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ale\u0161\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minuty\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Debugowanie kodu niestandardowego Oracle BRM Policy Opcode za po\u015brednictwem GDB","description":"Artyku\u0142 na temat debugowania kodu niestandardowego polityki Oracle Billing and Revenue Management (Oracle BRM) przy u\u017cyciu zewn\u0119trznego debuggera GDB.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tridenstechnology.com\/pl\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","og_locale":"pl_PL","og_type":"article","og_title":"Oracle BRM Policy Opcode Custom Code Debugging via GDB","og_description":"An article about debugging Oracle Billing and Revenue Management (Oracle BRM) policy opcodes custom code using external debugger GDB.","og_url":"https:\/\/tridenstechnology.com\/pl\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","og_site_name":"Tridens","article_publisher":"https:\/\/www.facebook.com\/tridenstechnology","article_published_time":"2019-09-05T11:08:56+00:00","article_modified_time":"2022-03-01T15:10:30+00:00","og_image":[{"width":1734,"height":1156,"url":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","type":"image\/png"}],"author":"Ale\u0161","twitter_card":"summary_large_image","twitter_creator":"@TridensTech","twitter_site":"@TridensTech","twitter_misc":{"Napisane przez":"Ale\u0161","Szacowany czas czytania":"3 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#article","isPartOf":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/"},"author":{"name":"Ale\u0161","@id":"https:\/\/tridenstechnology.com\/#\/schema\/person\/ccd247e07a5e0f856ec13af63d611358"},"headline":"Oracle BRM Policy Opcode Custom Code Debugging via GDB","datePublished":"2019-09-05T11:08:56+00:00","dateModified":"2022-03-01T15:10:30+00:00","mainEntityOfPage":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/"},"wordCount":515,"commentCount":0,"publisher":{"@id":"https:\/\/tridenstechnology.com\/#organization"},"image":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#primaryimage"},"thumbnailUrl":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","articleSection":["Oracle Billing"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#respond"]}],"accessibilityFeature":["tableOfContents"]},{"@type":"WebPage","@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","url":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","name":"Debugowanie kodu niestandardowego Oracle BRM Policy Opcode za po\u015brednictwem GDB","isPartOf":{"@id":"https:\/\/tridenstechnology.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#primaryimage"},"image":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#primaryimage"},"thumbnailUrl":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","datePublished":"2019-09-05T11:08:56+00:00","dateModified":"2022-03-01T15:10:30+00:00","description":"Artyku\u0142 na temat debugowania kodu niestandardowego polityki Oracle Billing and Revenue Management (Oracle BRM) przy u\u017cyciu zewn\u0119trznego debuggera GDB.","breadcrumb":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#primaryimage","url":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","contentUrl":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","width":1734,"height":1156,"caption":"Oracle BRM - Billing and Revenue Management"},{"@type":"BreadcrumbList","@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tridenstechnology.com\/"},{"@type":"ListItem","position":2,"name":"Oracle BRM Policy Opcode Custom Code Debugging via GDB"}]},{"@type":"WebSite","@id":"https:\/\/tridenstechnology.com\/#website","url":"https:\/\/tridenstechnology.com\/","name":"Tridens","description":"Monetyzacja, rozliczenia i \u0142adowanie pojazd\u00f3w elektrycznych","publisher":{"@id":"https:\/\/tridenstechnology.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tridenstechnology.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/tridenstechnology.com\/#organization","name":"Tridens","url":"https:\/\/tridenstechnology.com\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/tridenstechnology.com\/#\/schema\/logo\/image\/","url":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/02\/tridens_logo_invert.png","contentUrl":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/02\/tridens_logo_invert.png","width":600,"height":191,"caption":"Tridens"},"image":{"@id":"https:\/\/tridenstechnology.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/tridenstechnology","https:\/\/x.com\/TridensTech","https:\/\/www.instagram.com\/tridenstechnology\/","https:\/\/www.linkedin.com\/company\/tridens","https:\/\/www.youtube.com\/user\/TridensIT"]},{"@type":"Person","@id":"https:\/\/tridenstechnology.com\/#\/schema\/person\/ccd247e07a5e0f856ec13af63d611358","name":"Ale\u0161","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/secure.gravatar.com\/avatar\/0df040b8c52446051022ab32cd2ac1dc64d3c7eed18d5bd5ab9f2992b8935fc8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0df040b8c52446051022ab32cd2ac1dc64d3c7eed18d5bd5ab9f2992b8935fc8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0df040b8c52446051022ab32cd2ac1dc64d3c7eed18d5bd5ab9f2992b8935fc8?s=96&d=mm&r=g","caption":"Ale\u0161"},"description":"Ales Pristovnik jest dyrektorem generalnym Tridens Technology, s\u0142owe\u0144skiej firmy specjalizuj\u0105cej si\u0119 w tworzeniu oprogramowania dla przemys\u0142u motoryzacyjnego. Ma d\u0142ug\u0105 histori\u0119 w bran\u017cy IT, pracuj\u0105c w przesz\u0142o\u015bci dla kilku du\u017cych firm. Jego pasj\u0105 jest technologia i innowacje, a obecnie koncentruje si\u0119 na opracowywaniu rozwi\u0105za\u0144, kt\u00f3re poprawi\u0105 bezpiecze\u0144stwo i wydajno\u015b\u0107 przemys\u0142u motoryzacyjnego. Ma silne do\u015bwiadczenie w przyw\u00f3dztwie i zarz\u0105dzaniu i jest zaanga\u017cowany w rozw\u00f3j swojej firmy w stale rozwijaj\u0105cym si\u0119 sektorze technologicznym.","url":"https:\/\/tridenstechnology.com\/pl\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/posts\/3228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/comments?post=3228"}],"version-history":[{"count":0,"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/posts\/3228\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/media\/3165"}],"wp:attachment":[{"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/media?parent=3228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/categories?post=3228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tridenstechnology.com\/pl\/wp-json\/wp\/v2\/tags?post=3228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}