{"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\/es\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","title":{"rendered":"Depuraci\u00f3n de c\u00f3digo personalizado de Oracle BRM Policy Opcode mediante GDB"},"content":{"rendered":"<p>Si queremos producir un <a href=\"https:\/\/tridenstechnology.com\/oracle-brm\/\">Oracle BRM<\/a> software, debemos cumplir algunos requisitos relativos a nuestro proceso de desarrollo. Es especialmente importante incorporar buenas t\u00e9cnicas de prueba y depuraci\u00f3n en nuestro proceso de desarrollo.<br>Las pruebas son un proceso de b\u00fasqueda de fallos o errores en un producto de software que realiza manualmente un probador o que puede automatizarse.<br><a href=\"https:\/\/en.wikipedia.org\/wiki\/Debugging\">Depuraci\u00f3n<\/a> es el proceso de encontrar y resolver defectos o problemas dentro de un programa inform\u00e1tico que impiden el correcto funcionamiento del software o de un sistema inform\u00e1tico. B\u00e1sicamente, es un proceso de reparaci\u00f3n de los fallos encontrados en la fase de pruebas. El programador o desarrollador es el responsable de la depuraci\u00f3n y no puede automatizarse.<\/p>\n\n\n\n<div class=\"wp-block-yoast-seo-table-of-contents yoast-table-of-contents\"><h2>\u00cdndice<\/h2><ul><li><a href=\"#h-debugging-oracle-brm-policy-opcodes-custom-code\" data-level=\"2\">Depuraci\u00f3n del c\u00f3digo personalizado de los opcodes de la pol\u00edtica Oracle BRM<\/a><\/li><li><a href=\"#h-debugging-in-practice\" data-level=\"2\">Depuraci\u00f3n en la pr\u00e1ctica<\/a><\/li><\/ul><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-debugging-oracle-brm-policy-opcodes-custom-code\">Depuraci\u00f3n del c\u00f3digo personalizado de los opcodes de la pol\u00edtica Oracle BRM<\/h2>\n\n\n\n<p>Al personalizar los opcodes de la pol\u00edtica en <a href=\"https:\/\/tridenstechnology.com\/oracle-brm\/\">Oracle BRM<\/a> A menudo es necesario depurar alg\u00fan c\u00f3digo para encontrar posibles fallos o analizar el comportamiento del c\u00f3digo. Se pueden realizar algunos an\u00e1lisis b\u00e1sicos con el registro de algunos mensajes de depuraci\u00f3n y el an\u00e1lisis de los registros, pero un m\u00e9todo mucho m\u00e1s avanzado y potente es utilizar una herramienta independiente: el depurador. En este art\u00edculo veremos c\u00f3mo podemos utilizar el depurador de c\u00f3digo abierto GDB para depurar un proceso Oracle BRM cm que realiza tambi\u00e9n algo de c\u00f3digo personalizado (vea la imagen de abajo).<\/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=\"Depuraci\u00f3n del CM Oracle BRM con 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>Vista general esquem\u00e1tica de la depuraci\u00f3n del CM Oracle BRM utilizando GDB<\/figcaption><\/figure><\/div>\n\n\n\n<p><a href=\"https:\/\/www.gnu.org\/software\/gdb\/\">GDB<\/a> es un depurador de c\u00f3digo abierto que proporciona muchas herramientas avanzadas y potentes para analizar y depurar nuestro c\u00f3digo. Algunas de las caracter\u00edsticas b\u00e1sicas de GDB son los puntos de interrupci\u00f3n (condicionales\/no condicionales), los relojes, las trazas hacia atr\u00e1s y la ejecuci\u00f3n incremental de c\u00f3digo. Por supuesto, tambi\u00e9n puede ver y modificar los valores de las variables y llamar a diversas funciones. Veamos ahora c\u00f3mo utilizamos GDB con cm process en la pr\u00e1ctica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-debugging-in-practice\">Depuraci\u00f3n en la pr\u00e1ctica<\/h2>\n\n\n\n<p>En primer lugar, debemos obtener un PID de nuestro proceso CM:<\/p>\n\n\n\n<p><em>ps x<\/em><\/p>\n\n\n\n<p>Encuentre el PID del proceso CM y util\u00edcelo para conectarse a ese proceso con GDB:<\/p>\n\n\n\n<p>gdb cm<\/p>\n\n\n\n<p>Ahora se abre el shell de GDB donde podemos ejecutar varios comandos que GDB soporta. Cada nueva conexi\u00f3n que se establece con CM provoca el desove de un nuevo proceso hijo CM desde el CM padre. Queremos que GDB tambi\u00e9n rastree dichos procesos hijos. Ejecute el siguiente comando en el shell de GDB:<\/p>\n\n\n\n<p>(gdb) set follow-fork-mode child<\/p>\n\n\n\n<p>Dependiendo de sus necesidades puede que tambi\u00e9n quiera explorar los comandos set detach-on-fork y attach. Ahora establezcamos alg\u00fan punto de ruptura en la implementaci\u00f3n de alg\u00fan opcode de pol\u00edtica, como en el siguiente ejemplo:<\/p>\n\n\n\n<p>(gdb) break fm_act_pol_post_reauthorize.c:192<\/p>\n\n\n\n<p>Cuando ahora activemos la ejecuci\u00f3n del opcode de la pol\u00edtica, \u00e9sta ser\u00e1 interrumpida por el punto de interrupci\u00f3n (o incluso antes nos notificar\u00e1 que se ha generado un nuevo hijo). Entonces podremos seguir el flujo de c\u00f3digo paso a paso utilizando los comandos next (abbr. n) o step. Si estamos interesados en el valor de alguna variable, podemos imprimirlo utilizando:<\/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=\"Ejemplo de depuraci\u00f3n del proceso CM Oracle BRM\" 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>Ejemplo de uso de GDB para depurar el proceso Oracle BRM CM<\/figcaption><\/figure><\/div>\n\n\n\n<p>Tambi\u00e9n disponemos de muchas m\u00e1s funciones avanzadas y potentes que se describen en detalle en la documentaci\u00f3n del BGF y en la ayuda integrada. Le invitamos a investigarlas para ver c\u00f3mo pueden ayudarle.<\/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.4 (Yoast SEO v27.4) - 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\/es\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ale\u0161\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Depuraci\u00f3n de c\u00f3digo personalizado de Oracle BRM Policy Opcode mediante GDB","description":"Un art\u00edculo sobre la depuraci\u00f3n del c\u00f3digo personalizado de los opcodes de la pol\u00edtica Oracle Billing and Revenue Management (Oracle BRM) utilizando el 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\/es\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","og_locale":"es_ES","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\/es\/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":{"Escrito por":"Ale\u0161","Tiempo de lectura":"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":"es","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":"Depuraci\u00f3n de c\u00f3digo personalizado de Oracle BRM Policy Opcode mediante 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":"Un art\u00edculo sobre la depuraci\u00f3n del c\u00f3digo personalizado de los opcodes de la pol\u00edtica Oracle Billing and Revenue Management (Oracle BRM) utilizando el depurador externo GDB.","breadcrumb":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"Monetizaci\u00f3n, facturaci\u00f3n y recarga de veh\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":"es"},{"@type":"Organization","@id":"https:\/\/tridenstechnology.com\/#organization","name":"Tridens","url":"https:\/\/tridenstechnology.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@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":"es","@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 es el director general de Tridens Technology, una empresa eslovena especializada en el desarrollo de soluciones de software para la industria del autom\u00f3vil. Tiene una larga trayectoria en el sector de las TI, ya que ha trabajado para varias grandes empresas en el pasado. Le apasionan la tecnolog\u00eda y la innovaci\u00f3n, y su objetivo actual es desarrollar soluciones que mejoren la seguridad y la eficacia de la industria automovil\u00edstica. Posee una s\u00f3lida formaci\u00f3n en liderazgo y gesti\u00f3n, y se ha comprometido a impulsar su empresa en un sector tecnol\u00f3gico en constante evoluci\u00f3n.","url":"https:\/\/tridenstechnology.com\/es\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/posts\/3228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/comments?post=3228"}],"version-history":[{"count":0,"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/posts\/3228\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/media\/3165"}],"wp:attachment":[{"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/media?parent=3228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/categories?post=3228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tridenstechnology.com\/es\/wp-json\/wp\/v2\/tags?post=3228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}