{"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-politica-opcode-codigo-personalizado-de-depuracao-via-gdb","status":"publish","type":"post","link":"https:\/\/tridenstechnology.com\/pt\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","title":{"rendered":"Depura\u00e7\u00e3o de c\u00f3digo personalizado de opcode de pol\u00edtica Oracle BRM via GDB"},"content":{"rendered":"<p>Se quisermos produzir um produto de alta qualidade da nossa <a href=\"https:\/\/tridenstechnology.com\/oracle-brm\/\">Oracle BRM<\/a> Para desenvolver software, temos de cumprir alguns requisitos relativamente ao nosso processo de desenvolvimento. \u00c9 especialmente importante incorporar boas t\u00e9cnicas de teste e depura\u00e7\u00e3o no nosso processo de desenvolvimento.<br>Os testes s\u00e3o um processo de detec\u00e7\u00e3o de falhas ou erros num produto de software que \u00e9 efectuado manualmente por um testador ou pode ser automatizado.<br><a href=\"https:\/\/en.wikipedia.org\/wiki\/Debugging\">Depura\u00e7\u00e3o<\/a> \u00e9 o processo de encontrar e resolver defeitos ou problemas num programa de computador que impedem o funcionamento correcto do software ou de um sistema. Basicamente, \u00e9 um processo de correc\u00e7\u00e3o dos erros encontrados na fase de teste. O programador ou programador \u00e9 respons\u00e1vel pela depura\u00e7\u00e3o e esta n\u00e3o pode ser automatizada.<\/p>\n\n\n\n<div class=\"wp-block-yoast-seo-table-of-contents yoast-table-of-contents\"><h2>Tabela de conte\u00fados<\/h2><ul><li><a href=\"#h-debugging-oracle-brm-policy-opcodes-custom-code\" data-level=\"2\">Depurar c\u00f3digo personalizado de opcodes de pol\u00edtica Oracle BRM<\/a><\/li><li><a href=\"#h-debugging-in-practice\" data-level=\"2\">A depura\u00e7\u00e3o na pr\u00e1tica<\/a><\/li><\/ul><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-debugging-oracle-brm-policy-opcodes-custom-code\">Depurar c\u00f3digo personalizado de opcodes de pol\u00edtica Oracle BRM<\/h2>\n\n\n\n<p>Ao personalizar os c\u00f3digos de opera\u00e7\u00e3o de pol\u00edtica em <a href=\"https:\/\/tridenstechnology.com\/oracle-brm\/\">Oracle BRM<\/a> \u00e9 frequentemente necess\u00e1rio depurar algum c\u00f3digo para encontrar potenciais erros ou analisar o comportamento do c\u00f3digo. Algumas an\u00e1lises b\u00e1sicas podem ser feitas registando algumas mensagens de depura\u00e7\u00e3o e analisando os registos, mas um m\u00e9todo muito mais avan\u00e7ado e poderoso \u00e9 utilizar uma ferramenta separada - o depurador. Neste artigo, veremos como podemos usar o depurador de c\u00f3digo aberto GDB para depurar um processo Oracle BRM cm que executa tamb\u00e9m algum c\u00f3digo personalizado (veja a figura abaixo).<\/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=\"Depura\u00e7\u00e3o do CM Oracle BRM com 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>Vis\u00e3o geral esquem\u00e1tica da depura\u00e7\u00e3o do CM Oracle BRM usando GDB<\/figcaption><\/figure><\/div>\n\n\n\n<p><a href=\"https:\/\/www.gnu.org\/software\/gdb\/\">GDB<\/a> \u00e9 um depurador de c\u00f3digo aberto que fornece muitas ferramentas avan\u00e7adas e poderosas para analisar e depurar o nosso c\u00f3digo. Algumas das funcionalidades b\u00e1sicas do GDB s\u00e3o os pontos de interrup\u00e7\u00e3o (condicionais\/n\u00e3o condicionais), watches, back traces e execu\u00e7\u00e3o incremental de c\u00f3digo. Claro que tamb\u00e9m pode ver e modificar valores de vari\u00e1veis e chamar v\u00e1rias fun\u00e7\u00f5es. Agora vamos ver como usamos o GDB com o processo cm na pr\u00e1tica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-debugging-in-practice\">A depura\u00e7\u00e3o na pr\u00e1tica<\/h2>\n\n\n\n<p>Primeiro, temos de obter um PID do nosso processo CM:<\/p>\n\n\n\n<p><em>ps x<\/em><\/p>\n\n\n\n<p>Encontre o PID do processo CM e utilize-o para se ligar a esse processo com a GDB:<\/p>\n\n\n\n<p>gdb cm<\/p>\n\n\n\n<p>Agora o shell GDB \u00e9 aberto, onde podemos executar v\u00e1rios comandos que o GDB suporta. Cada nova conex\u00e3o que \u00e9 estabelecida com o CM causa a gera\u00e7\u00e3o de um novo processo CM filho do CM pai. Queremos que o GDB tamb\u00e9m rastreie esses processos filhos. Execute o seguinte comando no shell do GDB:<\/p>\n\n\n\n<p>(gdb) definir follow-fork-mode child<\/p>\n\n\n\n<p>Dependendo das suas necessidades, pode tamb\u00e9m querer explorar os comandos set detach-on-fork e attach. Agora vamos definir um ponto de interrup\u00e7\u00e3o para uma implementa\u00e7\u00e3o de c\u00f3digo de opera\u00e7\u00e3o de pol\u00edtica, como no exemplo a seguir:<\/p>\n\n\n\n<p>(gdb) break fm_act_pol_post_reauthorize.c:192<\/p>\n\n\n\n<p>Quando desencadearmos agora a execu\u00e7\u00e3o do c\u00f3digo de opera\u00e7\u00e3o da pol\u00edtica, esta ser\u00e1 interrompida por um ponto de interrup\u00e7\u00e3o (ou mesmo antes disso, notificar-nos-\u00e1 de que foi criado um novo filho). Podemos ent\u00e3o seguir o fluxo de c\u00f3digo passo a passo utilizando os comandos next (abreviatura n) ou step. Se estivermos interessados num valor de uma vari\u00e1vel, podemos imprimi-lo utilizando:<\/p>\n\n\n\n<p>imprimir<\/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=\"Exemplo de depura\u00e7\u00e3o do processo 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>Exemplo de utiliza\u00e7\u00e3o da GDB para depurar o processo CM Oracle BRM<\/figcaption><\/figure><\/div>\n\n\n\n<p>Muitas outras caracter\u00edsticas mais avan\u00e7adas e poderosas est\u00e3o tamb\u00e9m \u00e0 nossa disposi\u00e7\u00e3o e s\u00e3o descritas em pormenor na documenta\u00e7\u00e3o da GDB e na ajuda integrada. Est\u00e1 convidado a pesquis\u00e1-las para ver como o podem ajudar.<\/p>","protected":false},"excerpt":{"rendered":"<p>Se quisermos produzir um software Oracle BRM de alta qualidade, temos de cumprir alguns requisitos relativamente ao nosso processo de desenvolvimento. \u00c9 especialmente importante incorporar boas t\u00e9cnicas de teste e depura\u00e7\u00e3o no nosso processo de desenvolvimento. O teste \u00e9 um processo de procura de bugs ou erros num produto de software que \u00e9 feito manualmente por um testador...<\/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\/pt\/oracle-brm-politica-opcode-codigo-personalizado-de-depuracao-via-gdb\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/oracle-brm-politica-opcode-codigo-personalizado-de-depuracao-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=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ale\u0161\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Depura\u00e7\u00e3o de c\u00f3digo personalizado de opcode de pol\u00edtica Oracle BRM via GDB","description":"Um artigo sobre a depura\u00e7\u00e3o do c\u00f3digo personalizado de opcodes de pol\u00edtica do Oracle Billing and Revenue Management (Oracle BRM) usando o depurador externo 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\/pt\/oracle-brm-politica-opcode-codigo-personalizado-de-depuracao-via-gdb\/","og_locale":"pt_PT","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\/pt\/oracle-brm-politica-opcode-codigo-personalizado-de-depuracao-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":{"Escrito por":"Ale\u0161","Tempo estimado de leitura":"3 minutos"},"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":"pt-PT","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":"Depura\u00e7\u00e3o de c\u00f3digo personalizado de opcode de pol\u00edtica Oracle BRM via 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":"Um artigo sobre a depura\u00e7\u00e3o do c\u00f3digo personalizado de opcodes de pol\u00edtica do Oracle Billing and Revenue Management (Oracle BRM) usando o depurador externo GDB.","breadcrumb":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@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":"Monetiza\u00e7\u00e3o, fatura\u00e7\u00e3o e carregamento de ve\u00edculos el\u00e9ctricos","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":"pt-PT"},{"@type":"Organization","@id":"https:\/\/tridenstechnology.com\/#organization","name":"Tridens","url":"https:\/\/tridenstechnology.com\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@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":"pt-PT","@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 \u00e9 o CEO da Tridens Technology, uma empresa eslovena especializada no desenvolvimento de solu\u00e7\u00f5es de software para a ind\u00fastria autom\u00f3vel. Ele tem uma longa hist\u00f3ria na ind\u00fastria de TI, tendo trabalhado para v\u00e1rias grandes empresas no passado. Ele tem uma paix\u00e3o pela tecnologia e inova\u00e7\u00e3o, e o seu foco actual \u00e9 o desenvolvimento de solu\u00e7\u00f5es que ir\u00e3o melhorar a seguran\u00e7a e efici\u00eancia da ind\u00fastria autom\u00f3vel. Ele tem um forte background em lideran\u00e7a e gest\u00e3o, e est\u00e1 empenhado em impulsionar a sua empresa no sector da tecnologia em constante evolu\u00e7\u00e3o.","url":"https:\/\/tridenstechnology.com\/pt\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/posts\/3228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/comments?post=3228"}],"version-history":[{"count":0,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/posts\/3228\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/media\/3165"}],"wp:attachment":[{"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/media?parent=3228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/categories?post=3228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/tags?post=3228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}