首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何获取堆栈跟踪(haskell)中的行号?

在Haskell中,要获取堆栈跟踪中的行号,可以使用GHC.Stack模块提供的函数srcLocStartLinesrcLocEndLine。这些函数可以从CallStack类型的值中提取源代码位置信息。

以下是一个示例代码,展示了如何获取堆栈跟踪中的行号:

代码语言:txt
复制
import GHC.Stack (CallStack, SrcLoc(..), getCallStack, srcLocStartLine, srcLocEndLine)

-- 定义一个函数,返回当前的堆栈跟踪
getStackTrace :: IO CallStack
getStackTrace = getCallStack

-- 获取堆栈跟踪中的行号
getLineNumbers :: IO [Int]
getLineNumbers = do
  stack <- getStackTrace
  return $ map extractLineNum stack
  where
    extractLineNum :: SrcLoc -> Int
    extractLineNum loc = srcLocStartLine loc

-- 示例函数,用于测试获取堆栈跟踪中的行号
exampleFunction :: IO ()
exampleFunction = do
  lineNumbers <- getLineNumbers
  putStrLn $ "Line numbers in stack trace: " ++ show lineNumbers

-- 运行示例函数
main :: IO ()
main = exampleFunction

在上述示例代码中,getStackTrace函数使用getCallStack函数获取当前的堆栈跟踪。然后,getLineNumbers函数从堆栈跟踪中提取源代码位置信息,并返回行号列表。最后,exampleFunction函数演示了如何使用getLineNumbers函数来获取堆栈跟踪中的行号。

请注意,由于Haskell是一种纯函数式编程语言,它的堆栈跟踪机制与其他语言可能有所不同。在Haskell中,堆栈跟踪通常用于调试目的,以帮助定位错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

「原创」如何快速获取银行、联行号数据?

由于做是POS前置交易系统,涉及到和商户进件以及交易相关业务,需要向上游支付机构上送“联行号”,但是由于系统内数据不全,经常出现找不到银行或者联行号有误等情况,导致无法进件。   ...先输入联行号进行查询,然后进去详情页,才能取到想要数据。所以第一步需要先获取查询接口,于是我又打开了熟悉控制台。 ?   ...从上图可以发现这些请求都是在获取广告,并没有发现我们想要接口,这个是啥情况,难道凭空变出来嘛。并不是,主要是因为这个网站不是前后端分离,所以这个时候我们需要从它源码下手。 ?...剩下两个网站相对比较简单,只需要更改相应行号,进行请求就可以获取到相应数据,所以这里不过多赘述。 爬虫编写   经过上面的分析了,已经取到了我们想要接口,可谓是万事俱备,只欠代码了。...比较下来其他两个就比较简单,直接替换联行号就可以了,还有就是这个三个网站也没啥反扒机制,所以很轻松就拿到了数据。

3.9K60
  • 如何在Python中保留异常装饰器堆栈跟踪

    当函数在装饰器抛出异常时,默认情况下,堆栈跟踪信息将指向装饰器函数,而不是实际引发异常函数。这使得调试和定位问题变得困难。...2、解决方案为了保留异常装饰器堆栈跟踪信息,我们可以使用以下两种方法:使用 raise 语句三参数形式在 Python 2.x ,我们可以使用 raise 语句三参数形式来指定异常类型、异常实例和堆栈跟踪信息...这样,堆栈跟踪信息就会指向函数 bottom,而不是函数 middle。使用 traceback 模块在 Python 3 ,我们还可以使用 traceback 模块来获取和操作堆栈跟踪信息。...try_except 装饰器会捕获函数 middle 抛出异常,并使用 traceback 模块获取堆栈跟踪信息。...上面就是我对于堆栈跟踪一些理解,如果有任何不懂可以评论区留言讨论,在实际应用,异常处理方式可能因需求而异。

    13310

    如何对CDH集群Impala打印线程堆栈

    本文直接演示如何在 CDH 集群打印 Impala 进程线程堆栈,不再需要编译源码。当然第一次操作时还是需要下载一些工具,可以在集群中固定选一台机器来配置环境,以后再操作时就比较方便了。 1....下载对应版本 Impala 源码,可以在 cloudera github release 页面查找:https://github.com/cloudera/Impala/releases 本例...上述方式生成 symbol 文件不带有文件名和行号,如果想尽可能地结合代码,可以下载并解析对应系统 rpm/deb 包。...symbol 信息就包含文件名和行号了。...解析输出包含了很多寄存器值,有点影响阅读,可以把它们去掉: grep -v = /tmp/resolved.txt | grep -v 'Found by' | less 这样能看到比较舒服堆栈

    3.2K11

    C#.NET 如何在第一次机会异常 FirstChanceException 获取比较完整异常堆栈

    在 FirstChangeException 事件,我们通常只能拿到异常堆栈第一帧,这对于我们捕捉到异常是好,但对分析第一次机会异常可能并不利。...本文介绍如何在 FirstChangeException 事件拿到比较完整异常堆栈,而不只是第一帧。...另外,你也可以用 ExceptionDispatchInfo 让内部异常堆栈也连接起来,详见我另一篇博客: 使用 ExceptionDispatchInfo 捕捉并重新抛出异常 - 吕毅 获取较完整第一次机会异常堆栈...我们需要等到 FirstChanceException 事件异常被 catch 到,就能获取到第一次抛出地方到 catch 处之间所有帧。...因为我们只需要当前调用堆栈异常处理执行完成即可。

    36440

    如何手动获取 Spring 容器 bean?

    ApplicationContextAware 接口作用: 先来看下 Spring API 对于 ApplicationContextAware 这个接口描述: ?...即是说,当一个类实现了这个接口之后,这个类就可以方便地获得 ApplicationContext 所有bean。...换句话说,就是这个类可以直接获取Spring配置文件,所有有引用到bean对象。 如何使用 ApplicationContextAware 接口? 如何使用该接口?很简单。...getContext(){ return context; } } 如此一来,我们就可以通过该工具类,来获得 ApplicationContext,进而使用其getBean方法来获取我们需要...2、在Spring配置文件中注册该工具类 之所以我们能如此方便地使用该工具类来获取,正是因为Spring能够为我们自动地执行 setApplicationContext 方法,显然,这也是因为IOC缘故

    2.6K10

    Java 如何获取 IP 属地

    细心小伙伴可能会发现,抖音新上线了 IP 属地功能,小伙伴在发表动态、发表评论以及聊天时候,都会显示自己 IP 属地信息 下面,我就来讲讲,Java 如何获取 IP 属地,主要分为以下几步...通过 HttpServletRequest 对象,获取用户 IP 地址 通过 IP 地址,获取对应省份、城市 首先需要写一个 IP 获取工具类,因为每一次用户 Request ...在我们获取到用户 IP 地址后,那么就可以获取对应 ip 信息了 我在 Github 冲浪时候,发现了 Ip2region 项目。...,需要下载仓库 ip2region.db 文件,然后放到 resource 目录下 然后,通过内置三种算法,分别转换用户 ip 地址     public static String getCityInfo...所以我们还需要对这个方法进行一下封装,得到获取 IP 属地信息。

    2.7K20

    以太坊主网上测试工具推荐

    如果你想进行确定性测试(不会在星期二通过,而星期五失败),我强烈建议你使用dapp.tools.其背后使用hevm,这是HaskellEVM实现 使用Haskell编写EVM(而不是Python或JS...这样可以大大减少测试时间,尤其是当测试需要与主网协议进行大量交互时 调试失败交易 在沙箱 如果你使用是dapp.tools, buidler,或brownie,那应该恭喜你,他们已经将日志记录和堆栈跟踪内置到了测试框架本身...hevm 堆栈跟踪 但是,如果你使用是ganache-cli框架。那就得放慢你脚步,去放置revert消息,以找出问题所在。 有一些人会说,ganache-cli有一个debugger。...Ethtx.info和bloxy.info提供了有关指定交易哈希详细堆栈跟踪(我怀疑它背后使用是openethereum[debug_tracetransaction](https://geth.ethereum.org...ethtx.info堆栈跟踪示例 有用链接 etherscan - 通用区块链浏览器 bloxy - 更高级区块链浏览器 ethtx - 堆栈跟踪 4bytes - 函数签名数据库 furucombo

    1.2K20

    Python如何获取列表重复元素索引?

    一、前言 昨天分享了一个文章,Python如何获取列表重复元素索引?,后来【瑜亮老师】看到文章之后,又提供了一个健壮性更强代码出来,这里拿出来给大家分享下,一起学习交流。...= 1] 这个方法确实很不错,比文中那个方法要全面很多,文中那个解法,只是针对问题,给了一个可行方案,确实换个场景的话,健壮性确实没有那么好。 二、总结 大家好,我是皮皮。...这篇文章主要分享了Python如何获取列表重复元素索引问题,文中针对该问题给出了具体解析和代码演示,帮助粉丝顺利解决了问题。...最后感谢粉丝【KKXL螳螂】提问,感谢【瑜亮老师】给出具体解析和代码演示。

    13.4K10

    如何在 React 获取点击元素 ID?

    在 React 应用,我们经常需要根据用户点击事件来执行相应操作。在某些情况下,我们需要获取用户点击元素唯一标识符(ID),以便进行进一步处理。...本文将详细介绍如何在 React 获取点击元素 ID,并提供示例代码帮助你理解和应用这个功能。使用事件处理函数在 React ,我们可以使用事件处理函数来获取点击元素信息。...示例代码下面是一个示例代码,演示了如何使用事件处理函数来获取点击元素 ID:import React from 'react';const ClickElement = () => { const...示例代码以下是一个示例代码,演示了如何使用 ref 来获取点击元素 ID:import React, { useRef } from 'react';const ClickElement = () =...结论本文详细介绍了在 React 获取点击元素 ID 两种方法:使用事件处理函数和使用 ref。

    3.4K30

    App如何获取gradle配置信息

    前言 在Android开发我们一般需要在app里获取gradle里配置信息: 1.在程序里使用gradle里配置项, 2.在resouce里使用gradle里配置项?...我们可以将这些信息设置在gradle.properties。(这一点后续需要详解) 二,如何使用gradle.properties? 1,在gradle.properties文件中进行变量初始化。...这样平时编译调试时候使用是debug版本默认false,发布时候使用是release版本为true,即只需要在代码获取这个isRelease值就可控制登录时候是否填写用户名密码或者直接赋值固定值...那怎么获取build.gradle文件值呢,整个app项目中有个配置文件AndroidManifest.xml,在application标签下,可新写meta-data标签,其中value值用${...然后代码中就可以写个工具类来获取manifest文件meta-data值。代码: ? 代码再根据返回值进行判断和控制即可。

    3K10

    【编程基础】Android如何获取资源尺寸?

    在Android为了实现不同屏幕适配,经常会用到在不同dimen.xml文件对于同一dimen ID定义不同大小,然后在代码通过getDimension函数来获取,下面就来说说几种getDimension...getDimension()是基于当前DisplayMetrics进行转换,获取指定资源id对应尺寸。文档里并没说这里返回就是像素,要注意这个函数返回值是float,像素肯定是int。...getDimensionPixelOffset()与getDimension()功能类似,不同是将结果转换为int,并且偏移转换(offset conversion,函数命名offset是这个意思...getDimension和getDimensionPixelOffset功能类似,都是获取某个dimen值,但是如果单位是dp或sp,则需要将其乘以density,如果是px,则不乘,并且getDimension...我用手机density是2.0所以所以会乘以2。

    2.5K70

    Hystrix降级逻辑如何获取触发异常?

    通过之前Spring Cloud系列教程《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》一文,我们已经知道如何通过Hystrix来保护自己服务不被外部依赖方拖垮情况...但是实际使用过程中经常碰到开发反应“莫名”触发了降级逻辑情况。 为了更精准定位触发原因,或是在降级逻辑需要根据不同异常做不同处理时,在降级方法,我们希望可以获取到主逻辑抛出异常信息。...接下来就来介绍一下Hystrix两种不同实现方式如何在降级逻辑获取异常信息方法。...注解方式 先介绍一下用注解方式定义Hystrix命令是如何在降级逻辑获取异常,实现非常简单,先看下面的例子: @HystrixCommand(fallbackMethod = "fallback"...重点看 fallback函数最后一个传参 Throwablethrowable。通过这样简单定义,开发人员就可以很方便获取触发降级逻辑异常信息,用作日志记录或者其它复杂业务逻辑了。

    1.7K30

    Hystrix降级逻辑如何获取触发异常?

    通过之前Spring Cloud系列教程《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》一文,我们已经知道如何通过Hystrix来保护自己服务不被外部依赖方拖垮情况...但是实际使用过程中经常碰到开发反应“莫名”触发了降级逻辑情况。 为了更精准定位触发原因,或是在降级逻辑需要根据不同异常做不同处理时,在降级方法,我们希望可以获取到主逻辑抛出异常信息。...接下来就来介绍一下Hystrix两种不同实现方式如何在降级逻辑获取异常信息方法。...注解方式 先介绍一下用注解方式定义Hystrix命令是如何在降级逻辑获取异常,实现非常简单,先看下面的例子: @HystrixCommand(fallbackMethod = "fallback"...重点看 fallback函数最后一个传参 Throwablethrowable。通过这样简单定义,开发人员就可以很方便获取触发降级逻辑异常信息,用作日志记录或者其它复杂业务逻辑了。

    1.8K30

    go-runtimepprof

    软件包 pprof主要功能是可视化工具所期望格式写入运行时分析数据 获取所有已知profile切片,按名称排序 开启/关闭 当前进程CPU profile 如何将当前进程堆栈信息写入文件 新建...profile 将当前栈添加到分析 获取当前执行栈数量 从该分析移除与值value相关联执行栈 将profile写入到文件 通过名称查找profile 开始之前先下载性能文件分析工具,下载地址...image.png 通过pprof.Profiles 我们获取到了main方法堆栈信息 goroutine - 当前Go所有程调用栈踪迹 heap - 所有堆分配采样...image.png 软件包 pprof主要功能是可视化工具所期望格式写入运行时分析数据 获取所有已知profile切片,按名称排序 开启/关闭 当前进程CPU profile 如何将当前进程堆栈信息写入文件...image.png 通过pprof.Profiles 我们获取到了main方法堆栈信息 goroutine - 当前Go所有程调用栈踪迹 heap - 所有堆分配采样

    1.4K20
    领券